UrlBuilder.java 22.4 KB
Newer Older
智布道's avatar
智布道 已提交
1 2
package me.zhyd.oauth.utils;

3
import me.zhyd.oauth.config.AuthSource;
智布道's avatar
智布道 已提交
4 5 6 7 8 9 10 11 12 13 14 15

import java.text.MessageFormat;

/**
 * Url构建工具类
 *
 * @author yadong.zhang (yadong.zhang0415(a)gmail.com)
 * @version 1.0
 * @since 1.0
 */
public class UrlBuilder {

16
    private static final String GITHUB_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}";
智布道's avatar
智布道 已提交
17
    private static final String GITHUB_USER_INFO_PATTERN = "{0}?access_token={1}";
18
    private static final String GITHUB_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}";
智布道's avatar
智布道 已提交
19

20 21 22 23
    private static final String GOOGLE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&scope=openid%20email%20profile&redirect_uri={2}&state={3}";
    private static final String GOOGLE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code";
    private static final String GOOGLE_USER_INFO_PATTERN = "{0}?id_token={1}";

智布道's avatar
智布道 已提交
24 25 26

    private static final String GITEE_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}";
    private static final String GITEE_USER_INFO_PATTERN = "{0}?access_token={1}";
27
    private static final String GITEE_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}";
智布道's avatar
智布道 已提交
28

智布道's avatar
智布道 已提交
29
    private static final String DING_TALK_QRCONNECT_PATTERN = "{0}?appid={1}&response_type=code&scope=snsapi_login&redirect_uri={2}&state={3}";
智布道's avatar
智布道 已提交
30 31
    private static final String DING_TALK_USER_INFO_PATTERN = "{0}?signature={1}&timestamp={2}&accessKey={3}";

32 33
    private static final String BAIDU_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}";
    private static final String BAIDU_USER_INFO_PATTERN = "{0}?access_token={1}";
智布道's avatar
智布道 已提交
34
    private static final String BAIDU_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&display=popup&state={3}";
35 36
    private static final String BAIDU_REVOKE_PATTERN = "{0}?access_token={1}";

37 38
    private static final String CSDN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}";
    private static final String CSDN_USER_INFO_PATTERN = "{0}?access_token={1}";
智布道's avatar
智布道 已提交
39
    private static final String CSDN_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}";
40 41 42

    private static final String CODING_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}";
    private static final String CODING_USER_INFO_PATTERN = "{0}?access_token={1}";
智布道's avatar
智布道 已提交
43
    private static final String CODING_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}";
44

智布道's avatar
智布道 已提交
45
    private static final String ALIPAY_AUTHORIZE_PATTERN = "{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}";
46

47

48 49 50 51
    private static final String FACEBOOK_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope=";
    private static final String FACEBOOK_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code";
    private static final String FACEBOOK_USER_INFO_PATTERN = "{0}?access_token={1}&fields=id,name,birthday,gender,hometown,email,devices,picture.width(400)";

52
    private static final String DOUYIN_AUTHORIZE_PATTERN = "{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&scope=user_info";
S
skqing 已提交
53
    private static final String DOUYIN_ACCESS_TOKEN_PATTERN = "{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorization_code";
54 55 56
    private static final String DOUYIN_USER_INFO_PATTERN = "{0}?access_token={1}&open_id={2}";
    private static final String DOUYIN_REFRESH_TOKEN_PATTERN = "{0}?client_key={1}&refresh_token={2}&grant_type=refresh_token";

57 58 59 60 61 62 63 64 65 66 67
    private static final String LINKEDIN_AUTHORIZE_PATTERN = "{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code&scope=r_liteprofile%20r_emailaddress%20w_member_social";
    private static final String LINKEDIN_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code";
    private static final String LINKEDIN_USER_INFO_PATTERN = "{0}?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))";
    private static final String LINKEDIN_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&refresh_token={3}&grant_type=refresh_token";

    private static final String MICROSOFT_AUTHORIZE_PATTERN = "{0}?client_id={1}&response_type=code&redirect_uri={2}&response_mode=query&scope=offline_access%20user.read%20mail.read&state={3}";
    private static final String MICROSOFT_ACCESS_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&code={4}&grant_type=authorization_code";
    private static final String MICROSOFT_USER_INFO_PATTERN = "{0}";
    private static final String MICROSOFT_REFRESH_TOKEN_PATTERN = "{0}?client_id={1}&client_secret={2}&scope=user.read%20mail.read&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token";


68

69 70 71 72 73 74 75 76 77
    /**
     * 获取state,如果为空, 则默认去当前日期的时间戳
     *
     * @param state state
     */
    private static Object getState(String state) {
        return StringUtils.isEmpty(state) ? String.valueOf(System.currentTimeMillis()) : state;
    }

智布道's avatar
智布道 已提交
78 79 80
    /**
     * 获取githubtoken的接口地址
     *
81 82 83
     * @param clientId     github 应用的Client ID
     * @param clientSecret github 应用的Client Secret
     * @param code         github 授权前的code,用来换token
智布道's avatar
智布道 已提交
84
     * @param redirectUri  待跳转的页面
智布道's avatar
智布道 已提交
85
     * @return full url
智布道's avatar
智布道 已提交
86
     */
87 88
    public static String getGithubAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) {
        return MessageFormat.format(GITHUB_ACCESS_TOKEN_PATTERN, AuthSource.GITHUB.accessToken(), clientId, clientSecret, code, redirectUri);
智布道's avatar
智布道 已提交
89 90 91 92 93 94
    }

    /**
     * 获取github用户详情的接口地址
     *
     * @param token github 应用的token
智布道's avatar
智布道 已提交
95
     * @return full url
智布道's avatar
智布道 已提交
96 97
     */
    public static String getGithubUserInfoUrl(String token) {
98
        return MessageFormat.format(GITHUB_USER_INFO_PATTERN, AuthSource.GITHUB.userInfo(), token);
智布道's avatar
智布道 已提交
99 100 101 102 103 104 105
    }

    /**
     * 获取github授权地址
     *
     * @param clientId    github 应用的Client ID
     * @param redirectUrl github 应用授权成功后的回调地址
106
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
智布道's avatar
智布道 已提交
107
     * @return full url
智布道's avatar
智布道 已提交
108
     */
109
    public static String getGithubAuthorizeUrl(String clientId, String redirectUrl, String state) {
110
        return MessageFormat.format(GITHUB_AUTHORIZE_PATTERN, AuthSource.GITHUB.authorize(), clientId, redirectUrl, getState(state));
智布道's avatar
智布道 已提交
111 112 113 114 115
    }

    /**
     * 获取gitee token的接口地址
     *
116 117 118
     * @param clientId     gitee 应用的Client ID
     * @param clientSecret gitee 应用的Client Secret
     * @param code         gitee 授权前的code,用来换token
智布道's avatar
智布道 已提交
119
     * @param redirectUri  待跳转的页面
智布道's avatar
智布道 已提交
120
     * @return full url
智布道's avatar
智布道 已提交
121 122
     */
    public static String getGiteeAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) {
123
        return MessageFormat.format(GITEE_ACCESS_TOKEN_PATTERN, AuthSource.GITEE.accessToken(), clientId, clientSecret, code, redirectUri);
智布道's avatar
智布道 已提交
124 125 126 127 128 129
    }

    /**
     * 获取gitee用户详情的接口地址
     *
     * @param token gitee 应用的token
智布道's avatar
智布道 已提交
130
     * @return full url
智布道's avatar
智布道 已提交
131 132
     */
    public static String getGiteeUserInfoUrl(String token) {
133
        return MessageFormat.format(GITEE_USER_INFO_PATTERN, AuthSource.GITEE.userInfo(), token);
智布道's avatar
智布道 已提交
134 135 136 137 138 139 140
    }

    /**
     * 获取gitee授权地址
     *
     * @param clientId    gitee 应用的Client ID
     * @param redirectUrl gitee 应用授权成功后的回调地址
141
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
智布道's avatar
智布道 已提交
142 143
     * @return json
     */
144 145
    public static String getGiteeAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(GITEE_AUTHORIZE_PATTERN, AuthSource.GITEE.authorize(), clientId, redirectUrl, getState(state));
智布道's avatar
智布道 已提交
146
    }
智布道's avatar
智布道 已提交
147 148 149 150 151 152

    /**
     * 获取钉钉登录二维码的地址
     *
     * @param clientId    钉钉 应用的App Id
     * @param redirectUrl 钉钉 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
153
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
智布道's avatar
智布道 已提交
154 155
     * @return full url
     */
智布道's avatar
智布道 已提交
156 157
    public static String getDingTalkQrConnectUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(DING_TALK_QRCONNECT_PATTERN, AuthSource.DINGTALK.authorize(), clientId, redirectUrl, getState(state));
智布道's avatar
智布道 已提交
158 159 160 161 162 163 164 165 166 167 168
    }

    /**
     * 获取钉钉用户信息的地址
     *
     * @param signature 通过appSecret计算出来的签名值,签名计算方法:https://open-doc.dingtalk.com/microapp/faquestions/hxs5v9
     * @param timestamp 当前时间戳,单位是毫秒
     * @param accessKey 钉钉 应用的App Id
     * @return full url
     */
    public static String getDingTalkUserInfoUrl(String signature, String timestamp, String accessKey) {
169
        return MessageFormat.format(DING_TALK_USER_INFO_PATTERN, AuthSource.DINGTALK.userInfo(), signature, timestamp, accessKey);
智布道's avatar
智布道 已提交
170
    }
171 172 173 174

    /**
     * 获取baidu token的接口地址
     *
175 176 177
     * @param clientId     baidu 应用的API Key
     * @param clientSecret baidu 应用的Secret Key
     * @param code         baidu 授权前的code,用来换token
178 179 180 181
     * @param redirectUri  待跳转的页面
     * @return full url
     */
    public static String getBaiduAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) {
182
        return MessageFormat.format(BAIDU_ACCESS_TOKEN_PATTERN, AuthSource.BAIDU.accessToken(), clientId, clientSecret, code, redirectUri);
183 184 185 186 187 188 189 190 191
    }

    /**
     * 获取baidu用户详情的接口地址
     *
     * @param token baidu 应用的token
     * @return full url
     */
    public static String getBaiduUserInfoUrl(String token) {
192
        return MessageFormat.format(BAIDU_USER_INFO_PATTERN, AuthSource.BAIDU.userInfo(), token);
193 194 195 196 197 198 199
    }

    /**
     * 获取baidu授权地址
     *
     * @param clientId    baidu 应用的API Key
     * @param redirectUrl baidu 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
200
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
201 202
     * @return json
     */
智布道's avatar
智布道 已提交
203 204
    public static String getBaiduAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(BAIDU_AUTHORIZE_PATTERN, AuthSource.BAIDU.authorize(), clientId, redirectUrl, getState(state));
205 206 207 208 209
    }

    /**
     * 获取收回baidu授权的地址
     *
210
     * @param accessToken baidu 授权登录后的token
211 212 213
     * @return json
     */
    public static String getBaiduRevokeUrl(String accessToken) {
214
        return MessageFormat.format(BAIDU_REVOKE_PATTERN, AuthSource.BAIDU.revoke(), accessToken);
215
    }
216 217 218 219

    /**
     * 获取csdn token的接口地址
     *
220 221 222
     * @param clientId     csdn 应用的App Key
     * @param clientSecret csdn 应用的App Secret
     * @param code         csdn 授权前的code,用来换token
223 224 225 226
     * @param redirectUri  待跳转的页面
     * @return full url
     */
    public static String getCsdnAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) {
227
        return MessageFormat.format(CSDN_ACCESS_TOKEN_PATTERN, AuthSource.CSDN.accessToken(), clientId, clientSecret, code, redirectUri);
228 229 230 231 232 233 234 235 236
    }

    /**
     * 获取csdn用户详情的接口地址
     *
     * @param token csdn 应用的token
     * @return full url
     */
    public static String getCsdnUserInfoUrl(String token) {
237
        return MessageFormat.format(CSDN_USER_INFO_PATTERN, AuthSource.CSDN.userInfo(), token);
238 239 240 241 242 243 244
    }

    /**
     * 获取csdn授权地址
     *
     * @param clientId    csdn 应用的Client ID
     * @param redirectUrl csdn 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
245
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
246 247
     * @return full url
     */
智布道's avatar
智布道 已提交
248 249
    public static String getCsdnAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(CSDN_AUTHORIZE_PATTERN, AuthSource.CSDN.authorize(), clientId, redirectUrl, getState(state));
250 251 252 253 254
    }

    /**
     * 获取coding token的接口地址
     *
255 256 257
     * @param clientId     coding 应用的App Key
     * @param clientSecret coding 应用的App Secret
     * @param code         coding 授权前的code,用来换token
258 259 260
     * @return full url
     */
    public static String getCodingAccessTokenUrl(String clientId, String clientSecret, String code) {
261
        return MessageFormat.format(CODING_ACCESS_TOKEN_PATTERN, AuthSource.CODING.accessToken(), clientId, clientSecret, code);
262 263 264 265 266 267 268 269 270
    }

    /**
     * 获取coding用户详情的接口地址
     *
     * @param token coding 应用的token
     * @return full url
     */
    public static String getCodingUserInfoUrl(String token) {
271
        return MessageFormat.format(CODING_USER_INFO_PATTERN, AuthSource.CODING.userInfo(), token);
272 273 274 275 276 277 278
    }

    /**
     * 获取coding授权地址
     *
     * @param clientId    coding 应用的Client ID
     * @param redirectUrl coding 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
279
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
280 281
     * @return full url
     */
智布道's avatar
智布道 已提交
282 283
    public static String getCodingAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(CODING_AUTHORIZE_PATTERN, AuthSource.CODING.authorize(), clientId, redirectUrl, getState(state));
284 285
    }

286 287 288 289 290
    /**
     * 获取alipay授权地址
     *
     * @param clientId    alipay 应用的Client ID
     * @param redirectUrl alipay 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
291
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
292 293
     * @return full url
     */
智布道's avatar
智布道 已提交
294 295
    public static String getAlipayAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(ALIPAY_AUTHORIZE_PATTERN, AuthSource.ALIPAY.authorize(), clientId, redirectUrl, getState(state));
296
    }
297

298 299 300 301 302
    /**
     * 获取Google授权地址
     *
     * @param clientId    google 应用的Client ID
     * @param redirectUrl google 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
303
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
304 305
     * @return full url
     */
智布道's avatar
智布道 已提交
306 307
    public static String getGoogleAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(GOOGLE_AUTHORIZE_PATTERN, AuthSource.GOOGLE.authorize(), clientId, redirectUrl, getState(state));
308 309 310 311 312
    }

    /**
     * 获取Google token的接口地址
     *
313 314 315
     * @param clientId     google 应用的Client ID
     * @param clientSecret google 应用的Client Secret
     * @param code         google 授权前的code,用来换token
316 317 318 319
     * @param redirectUri  待跳转的页面
     * @return full url
     */
    public static String getGoogleAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) {
320
        return MessageFormat.format(GOOGLE_ACCESS_TOKEN_PATTERN, AuthSource.GOOGLE.accessToken(), clientId, clientSecret, code, redirectUri);
321 322 323 324 325 326 327 328 329
    }

    /**
     * 获取Google用户详情的接口地址
     *
     * @param token google 应用的token
     * @return full url
     */
    public static String getGoogleUserInfoUrl(String token) {
330
        return MessageFormat.format(GOOGLE_USER_INFO_PATTERN, AuthSource.GOOGLE.userInfo(), token);
331
    }
332 333 334 335 336 337

    /**
     * 获取Facebook授权地址
     *
     * @param clientId    Facebook 应用的Client ID
     * @param redirectUrl Facebook 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
338
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
339 340
     * @return full url
     */
智布道's avatar
智布道 已提交
341 342
    public static String getFacebookAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(FACEBOOK_AUTHORIZE_PATTERN, AuthSource.FACEBOOK.authorize(), clientId, redirectUrl, getState(state));
343 344 345 346 347 348 349 350 351 352 353 354
    }

    /**
     * 获取Facebook token的接口地址
     *
     * @param clientId     Facebook 应用的Client ID
     * @param clientSecret Facebook 应用的Client Secret
     * @param code         Facebook 授权前的code,用来换token
     * @param redirectUri  待跳转的页面
     * @return full url
     */
    public static String getFacebookAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) {
355
        return MessageFormat.format(FACEBOOK_ACCESS_TOKEN_PATTERN, AuthSource.FACEBOOK.accessToken(), clientId, clientSecret, code, redirectUri);
356 357 358 359 360 361 362 363 364
    }

    /**
     * 获取Facebook用户详情的接口地址
     *
     * @param token Facebook 应用的token
     * @return full url
     */
    public static String getFacebookUserInfoUrl(String token) {
365
        return MessageFormat.format(FACEBOOK_USER_INFO_PATTERN, AuthSource.FACEBOOK.userInfo(), token);
366
    }
367 368 369 370 371 372

    /**
     * 获取Douyin授权地址
     *
     * @param clientId    Douyin 应用的Client ID
     * @param redirectUrl Douyin 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
373
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
374 375
     * @return full url
     */
智布道's avatar
智布道 已提交
376 377
    public static String getDouyinAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(DOUYIN_AUTHORIZE_PATTERN, AuthSource.DOUYIN.authorize(), clientId, redirectUrl, getState(state));
378 379 380 381 382 383 384 385 386 387 388
    }

    /**
     * 获取Douyin token的接口地址
     *
     * @param clientId     Douyin 应用的Client ID
     * @param clientSecret Douyin 应用的Client Secret
     * @param code         Douyin 授权前的code,用来换token
     * @return full url
     */
    public static String getDouyinAccessTokenUrl(String clientId, String clientSecret, String code) {
389
        return MessageFormat.format(DOUYIN_ACCESS_TOKEN_PATTERN, AuthSource.DOUYIN.accessToken(), clientId, clientSecret, code);
390 391 392 393 394 395 396 397 398 399
    }

    /**
     * 获取Douyin用户详情的接口地址
     *
     * @param token  Douyin 应用的token
     * @param openId 用户在当前应用的唯一标识 通过token接口获取
     * @return full url
     */
    public static String getDouyinUserInfoUrl(String token, String openId) {
400
        return MessageFormat.format(DOUYIN_USER_INFO_PATTERN, AuthSource.DOUYIN.userInfo(), token, openId);
401 402 403 404 405
    }

    /**
     * 获取Douyin 刷新令牌 地址
     *
406 407
     * @param clientId     Douyin 应用的client_key
     * @param refreshToken Douyin 应用返回的refresh_token
408 409 410
     * @return full url
     */
    public static String getDouyinRefreshUrl(String clientId, String refreshToken) {
411
        return MessageFormat.format(DOUYIN_REFRESH_TOKEN_PATTERN, AuthSource.DOUYIN.refresh(), clientId, refreshToken);
412 413 414 415 416 417 418
    }

    /**
     * 获取Linkedin授权地址
     *
     * @param clientId    Linkedin 应用的Client ID
     * @param redirectUrl Linkedin 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
419
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
420 421
     * @return full url
     */
智布道's avatar
智布道 已提交
422 423
    public static String getLinkedinAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(LINKEDIN_AUTHORIZE_PATTERN, AuthSource.LINKEDIN.authorize(), clientId, redirectUrl, state);
424 425 426 427 428 429 430 431
    }

    /**
     * 获取Linkedin token的接口地址
     *
     * @param clientId     Linkedin 应用的Client ID
     * @param clientSecret Linkedin 应用的Client Secret
     * @param code         Linkedin 授权前的code,用来换token
432
     * @param redirectUrl  Linkedin 应用授权成功后的回调地址
433 434 435
     * @return full url
     */
    public static String getLinkedinAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUrl) {
436
        return MessageFormat.format(LINKEDIN_ACCESS_TOKEN_PATTERN, AuthSource.LINKEDIN.accessToken(), clientId, clientSecret, code, redirectUrl);
437 438 439 440 441 442 443 444
    }

    /**
     * 获取Linkedin用户详情的接口地址
     *
     * @return full url
     */
    public static String getLinkedinUserInfoUrl() {
445
        return MessageFormat.format(LINKEDIN_USER_INFO_PATTERN, AuthSource.LINKEDIN.userInfo());
446 447 448 449 450
    }

    /**
     * 获取Linkedin 刷新令牌 地址
     *
451
     * @param clientId     Linkedin 应用的client_key
452
     * @param clientSecret Linkedin 应用的Client Secret
453
     * @param refreshToken Linkedin 应用返回的refresh_token
454 455 456
     * @return full url
     */
    public static String getLinkedinRefreshUrl(String clientId, String clientSecret, String refreshToken) {
457
        return MessageFormat.format(LINKEDIN_REFRESH_TOKEN_PATTERN, AuthSource.LINKEDIN.refresh(), clientId, clientSecret, refreshToken);
458
    }
459 460 461 462 463 464

    /**
     * 获取微软授权地址
     *
     * @param clientId    微软 应用的Client ID
     * @param redirectUrl 微软 应用授权成功后的回调地址
智布道's avatar
智布道 已提交
465
     * @param state       随机字符串,用于保持会话状态,防止CSRF攻击
466 467
     * @return full url
     */
智布道's avatar
智布道 已提交
468 469
    public static String getMicrosoftAuthorizeUrl(String clientId, String redirectUrl, String state) {
        return MessageFormat.format(MICROSOFT_AUTHORIZE_PATTERN, AuthSource.MICROSOFT.authorize(), clientId, redirectUrl, getState(state));
470 471 472 473 474 475 476 477 478 479 480
    }

    /**
     * 获取微软 token的接口地址
     *
     * @param clientId     微软 应用的Client ID
     * @param clientSecret 微软 应用的Client Secret
     * @param redirectUrl  微软 应用授权成功后的回调地址
     * @param code         微软 授权前的code,用来换token
     * @return full url
     */
481
    public static String getMicrosoftAccessTokenUrl(String clientId, String clientSecret, String redirectUrl, String code) {
482
        return MessageFormat.format(MICROSOFT_ACCESS_TOKEN_PATTERN, AuthSource.MICROSOFT.accessToken(), clientId, clientSecret, redirectUrl, code);
483 484 485 486 487 488 489 490
    }

    /**
     * 获取微软用户详情的接口地址
     *
     * @return full url
     */
    public static String getMicrosoftUserInfoUrl() {
491
        return MessageFormat.format(MICROSOFT_USER_INFO_PATTERN, AuthSource.MICROSOFT.userInfo());
492 493 494 495 496
    }

    /**
     * 获取微软 刷新令牌 地址
     *
497
     * @param clientId     微软 应用的client_key
498 499
     * @param clientSecret 微软 应用的Client Secret
     * @param redirectUrl  微软 应用授权成功后的回调地址
500
     * @param refreshToken 微软 应用返回的refresh_token
501 502 503
     * @return full url
     */
    public static String getMicrosoftRefreshUrl(String clientId, String clientSecret, String redirectUrl, String refreshToken) {
504
        return MessageFormat.format(MICROSOFT_REFRESH_TOKEN_PATTERN, AuthSource.MICROSOFT.refresh(), clientId, clientSecret, redirectUrl, refreshToken);
505
    }
506

智布道's avatar
智布道 已提交
507
}