Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BI8CLL灬
JustAuth
提交
d5e60165
J
JustAuth
项目概览
BI8CLL灬
/
JustAuth
与 Fork 源项目一致
Fork自
justauth / JustAuth
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JustAuth
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
d5e60165
编写于
7月 18, 2019
作者:
智布道
👁
提交者:
GitHub
7月 18, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #23 from xkcoding/remove-urlbuilder
♻
重构部分代码
上级
32c540cf
d5189aa3
变更
52
隐藏空白更改
内联
并排
Showing
52 changed file
with
1242 addition
and
1733 deletion
+1242
-1733
.editorconfig
.editorconfig
+19
-0
src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java
src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java
+33
-19
src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java
src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java
+37
-25
src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java
src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java
+37
-26
src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java
src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java
+11
-18
src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java
src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java
+100
-9
src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java
src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java
+48
-22
src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java
src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java
+83
-31
src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java
src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java
+32
-24
src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java
src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java
+16
-23
src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java
src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java
+16
-23
src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java
src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java
+48
-27
src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java
src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java
+67
-39
src/main/java/me/zhyd/oauth/request/AuthMiRequest.java
src/main/java/me/zhyd/oauth/request/AuthMiRequest.java
+57
-31
src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java
...main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java
+90
-30
src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java
src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java
+52
-26
src/main/java/me/zhyd/oauth/request/AuthQqRequest.java
src/main/java/me/zhyd/oauth/request/AuthQqRequest.java
+36
-27
src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java
src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java
+19
-8
src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java
src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java
+30
-13
src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java
...ain/java/me/zhyd/oauth/request/AuthTeambitionRequest.java
+34
-37
src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java
...n/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java
+39
-28
src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java
src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java
+66
-24
src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java
src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java
+84
-29
src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java
src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java
+40
-29
src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java
+0
-45
src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java
+0
-48
src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java
+0
-48
src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java
+0
-83
src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java
+0
-46
src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java
+0
-48
src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java
+0
-48
src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java
+0
-48
src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java
+0
-48
src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java
+0
-53
src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java
+0
-49
src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java
+0
-46
src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java
...main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java
+0
-43
src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java
...in/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java
+0
-48
src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java
src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java
+0
-47
src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java
...ain/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java
+0
-38
src/main/java/me/zhyd/oauth/utils/AuthState.java
src/main/java/me/zhyd/oauth/utils/AuthState.java
+20
-0
src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java
src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java
+17
-3
src/main/java/me/zhyd/oauth/utils/UrlBuilder.java
src/main/java/me/zhyd/oauth/utils/UrlBuilder.java
+74
-0
src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java
src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java
+37
-0
未找到文件。
.editorconfig
0 → 100644
浏览文件 @
d5e60165
# JustAuth 开发组IDE 编辑器标准
root = true
# 空格替代Tab缩进在各种编辑工具下效果一致
[*]
indent_style = space
indent_size = 2
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
[*.java]
indent_size = 4
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false
src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java
浏览文件 @
d5e60165
...
...
@@ -14,8 +14,8 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthAlipayUrlBuilder
;
import
me.zhyd.oauth.utils.StringUtils
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* 支付宝登录
...
...
@@ -29,9 +29,9 @@ public class AuthAlipayRequest extends AuthDefaultRequest {
private
AlipayClient
alipayClient
;
public
AuthAlipayRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
ALIPAY
,
new
AuthAlipayUrlBuilder
()
);
super
(
config
,
AuthSource
.
ALIPAY
);
this
.
alipayClient
=
new
DefaultAlipayClient
(
AuthSource
.
ALIPAY
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
"json"
,
"UTF-8"
,
config
.
getAlipayPublicKey
(),
"RSA2"
);
.
getAlipayPublicKey
(),
"RSA2"
);
}
@Override
...
...
@@ -49,11 +49,11 @@ public class AuthAlipayRequest extends AuthDefaultRequest {
throw
new
AuthException
(
response
.
getSubMsg
());
}
return
AuthToken
.
builder
()
.
accessToken
(
response
.
getAccessToken
())
.
uid
(
response
.
getUserId
())
.
expireIn
(
Integer
.
parseInt
(
response
.
getExpiresIn
()))
.
refreshToken
(
response
.
getRefreshToken
())
.
build
();
.
accessToken
(
response
.
getAccessToken
())
.
uid
(
response
.
getUserId
())
.
expireIn
(
Integer
.
parseInt
(
response
.
getExpiresIn
()))
.
refreshToken
(
response
.
getRefreshToken
())
.
build
();
}
@Override
...
...
@@ -70,19 +70,33 @@ public class AuthAlipayRequest extends AuthDefaultRequest {
throw
new
AuthException
(
response
.
getSubMsg
());
}
String
province
=
response
.
getProvince
(),
city
=
response
.
getCity
();
String
province
=
response
.
getProvince
(),
city
=
response
.
getCity
();
String
location
=
String
.
format
(
"%s %s"
,
StringUtils
.
isEmpty
(
province
)
?
""
:
province
,
StringUtils
.
isEmpty
(
city
)
?
""
:
city
);
return
AuthUser
.
builder
()
.
uuid
(
response
.
getUserId
())
.
username
(
StringUtils
.
isEmpty
(
response
.
getUserName
())
?
response
.
getNickName
()
:
response
.
getUserName
())
.
nickname
(
response
.
getNickName
())
.
avatar
(
response
.
getAvatar
())
.
location
(
location
)
.
gender
(
AuthUserGender
.
getRealGender
(
response
.
getGender
()))
.
token
(
authToken
)
.
source
(
AuthSource
.
ALIPAY
)
.
build
();
.
uuid
(
response
.
getUserId
())
.
username
(
StringUtils
.
isEmpty
(
response
.
getUserName
())
?
response
.
getNickName
()
:
response
.
getUserName
())
.
nickname
(
response
.
getNickName
())
.
avatar
(
response
.
getAvatar
())
.
location
(
location
)
.
gender
(
AuthUserGender
.
getRealGender
(
response
.
getGender
()))
.
token
(
authToken
)
.
source
(
AuthSource
.
ALIPAY
)
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"app_id"
,
config
.
getClientId
())
.
queryParam
(
"scope"
,
"auth_user"
)
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java
浏览文件 @
d5e60165
...
...
@@ -8,8 +8,7 @@ import me.zhyd.oauth.config.AuthSource;
import
me.zhyd.oauth.enums.AuthBaiduErrorCode
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthBaiduUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* 百度账号登录
...
...
@@ -21,32 +20,28 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthBaiduRequest
extends
AuthDefaultRequest
{
public
AuthBaiduRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
BAIDU
,
new
AuthBaiduUrlBuilder
()
);
super
(
config
,
AuthSource
.
BAIDU
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
AuthBaiduErrorCode
errorCode
=
AuthBaiduErrorCode
.
getErrorCode
(
accessTokenObject
.
getString
(
"error"
));
if
(
AuthBaiduErrorCode
.
OK
!=
errorCode
)
{
throw
new
AuthException
(
errorCode
.
getDesc
());
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSONObject
.
parseObject
(
userInfo
);
AuthBaiduErrorCode
errorCode
=
AuthBaiduErrorCode
.
getErrorCode
(
object
.
getString
(
"error"
));
...
...
@@ -54,29 +49,46 @@ public class AuthBaiduRequest extends AuthDefaultRequest {
throw
new
AuthException
(
errorCode
.
getDesc
());
}
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"userid"
))
.
username
(
object
.
getString
(
"username"
))
.
nickname
(
object
.
getString
(
"username"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"sex"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
BAIDU
)
.
build
();
.
uuid
(
object
.
getString
(
"userid"
))
.
username
(
object
.
getString
(
"username"
))
.
nickname
(
object
.
getString
(
"username"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"sex"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
BAIDU
)
.
build
();
}
@Override
public
AuthResponse
revoke
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getRevokeUrl
(
accessToken
)).
execute
();
HttpResponse
response
=
HttpRequest
.
get
(
UrlBuilder
.
fromBaseUrl
(
source
.
revoke
())
.
queryParam
(
"access_token"
,
accessToken
)
.
build
()).
execute
();
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSONObject
.
parseObject
(
userInfo
);
if
(
object
.
containsKey
(
"error_code"
))
{
return
AuthResponse
.
builder
()
.
code
(
AuthResponseStatus
.
FAILURE
.
getCode
())
.
msg
(
object
.
getString
(
"error_msg"
))
.
build
();
.
code
(
AuthResponseStatus
.
FAILURE
.
getCode
())
.
msg
(
object
.
getString
(
"error_msg"
))
.
build
();
}
AuthResponseStatus
status
=
object
.
getIntValue
(
"result"
)
==
1
?
AuthResponseStatus
.
SUCCESS
:
AuthResponseStatus
.
FAILURE
;
return
AuthResponse
.
builder
().
code
(
status
.
getCode
()).
msg
(
status
.
getMsg
()).
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"display"
,
"popup"
)
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java
浏览文件 @
d5e60165
...
...
@@ -10,8 +10,7 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthCodingUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* Cooding登录
...
...
@@ -23,30 +22,26 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthCodingRequest
extends
AuthDefaultRequest
{
public
AuthCodingRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
CODING
,
new
AuthCodingUrlBuilder
()
);
super
(
config
,
AuthSource
.
CODING
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
get
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doGetAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
getIntValue
(
"code"
)
!=
0
)
{
throw
new
AuthException
(
"Unable to get token from coding using code ["
+
authCallback
.
getCode
()
+
"]: "
+
accessTokenObject
);
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
JSONObject
object
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
object
.
getIntValue
(
"code"
)
!=
0
)
{
throw
new
AuthException
(
object
.
getString
(
"msg"
));
...
...
@@ -54,18 +49,34 @@ public class AuthCodingRequest extends AuthDefaultRequest {
object
=
object
.
getJSONObject
(
"data"
);
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
avatar
(
"https://coding.net/"
+
object
.
getString
(
"avatar"
))
.
blog
(
"https://coding.net/"
+
object
.
getString
(
"path"
))
.
nickname
(
object
.
getString
(
"name"
))
.
company
(
object
.
getString
(
"company"
))
.
location
(
object
.
getString
(
"location"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"sex"
)))
.
email
(
object
.
getString
(
"email"
))
.
remark
(
object
.
getString
(
"slogan"
))
.
token
(
authToken
)
.
source
(
AuthSource
.
CODING
)
.
build
();
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
avatar
(
"https://coding.net/"
+
object
.
getString
(
"avatar"
))
.
blog
(
"https://coding.net/"
+
object
.
getString
(
"path"
))
.
nickname
(
object
.
getString
(
"name"
))
.
company
(
object
.
getString
(
"company"
))
.
location
(
object
.
getString
(
"location"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"sex"
)))
.
email
(
object
.
getString
(
"email"
))
.
remark
(
object
.
getString
(
"slogan"
))
.
token
(
authToken
)
.
source
(
AuthSource
.
CODING
)
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"scope"
,
"user"
)
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
...
...
@@ -10,8 +9,6 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthCsdnUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
/**
* CSDN登录
...
...
@@ -24,13 +21,12 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthCsdnRequest
extends
AuthDefaultRequest
{
public
AuthCsdnRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
CSDN
,
new
AuthCsdnUrlBuilder
()
);
super
(
config
,
AuthSource
.
CSDN
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
containsKey
(
"error_code"
))
{
throw
new
AuthException
(
"Unable to get token from csdn using code ["
+
authCallback
.
getCode
()
+
"]: "
+
accessTokenObject
);
...
...
@@ -40,22 +36,19 @@ public class AuthCsdnRequest extends AuthDefaultRequest {
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
JSONObject
object
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
object
.
containsKey
(
"error_code"
))
{
throw
new
AuthException
(
object
.
getString
(
"error"
));
}
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"username"
))
.
username
(
object
.
getString
(
"username"
))
.
remark
(
object
.
getString
(
"description"
))
.
blog
(
object
.
getString
(
"website"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
CSDN
)
.
build
();
.
uuid
(
object
.
getString
(
"username"
))
.
username
(
object
.
getString
(
"username"
))
.
remark
(
object
.
getString
(
"description"
))
.
blog
(
object
.
getString
(
"website"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
CSDN
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
lombok.Data
;
import
me.zhyd.oauth.config.AuthConfig
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthDefaultUrlBuilder
;
import
me.zhyd.oauth.utils.AuthChecker
;
import
me.zhyd.oauth.utils.StringUtils
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* 默认的request处理类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @author yangkai.shen (https://xkcoding.com)
* @version 1.0
* @since 1.8
*/
...
...
@@ -19,7 +23,6 @@ import me.zhyd.oauth.utils.AuthChecker;
public
abstract
class
AuthDefaultRequest
implements
AuthRequest
{
protected
AuthConfig
config
;
protected
AuthSource
source
;
protected
AuthDefaultUrlBuilder
urlBuilder
;
public
AuthDefaultRequest
(
AuthConfig
config
,
AuthSource
source
)
{
this
.
config
=
config
;
...
...
@@ -31,12 +34,6 @@ public abstract class AuthDefaultRequest implements AuthRequest {
AuthChecker
.
checkConfig
(
config
,
source
);
}
public
AuthDefaultRequest
(
AuthConfig
config
,
AuthSource
source
,
AuthDefaultUrlBuilder
urlBuilder
)
{
this
(
config
,
source
);
this
.
urlBuilder
=
urlBuilder
;
this
.
urlBuilder
.
setAuthConfig
(
config
);
}
protected
abstract
AuthToken
getAccessToken
(
AuthCallback
authCallback
);
protected
abstract
AuthUser
getUserInfo
(
AuthToken
authToken
);
...
...
@@ -70,6 +67,100 @@ public abstract class AuthDefaultRequest implements AuthRequest {
*/
@Override
public
String
authorize
()
{
return
this
.
urlBuilder
.
getAuthorizeUrl
();
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
build
();
}
/**
* 返回获取accessToken的url
*
* @return 返回获取accessToken的url
*/
protected
String
accessTokenUrl
(
String
code
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
accessToken
())
.
queryParam
(
"code"
,
code
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"client_secret"
,
config
.
getClientSecret
())
.
queryParam
(
"grant_type"
,
"authorization_code"
)
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
build
();
}
/**
* 返回获取accessToken的url
*
* @return 返回获取accessToken的url
*/
protected
String
refreshTokenUrl
(
String
refreshToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
refresh
())
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"client_secret"
,
config
.
getClientSecret
())
.
queryParam
(
"refresh_token"
,
refreshToken
)
.
queryParam
(
"grant_type"
,
"refresh_token"
)
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
build
();
}
/**
* 返回获取userInfo的url
*
* @return 返回获取userInfo的url
*/
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
()).
queryParam
(
"access_token"
,
authToken
.
getAccessToken
()).
build
();
}
/**
* 获取state,如果为空, 则默认去当前日期的时间戳
*
* @param state 原始的state
* @return 返回不为null的state
*/
protected
String
getRealState
(
String
state
)
{
return
StringUtils
.
isEmpty
(
state
)
?
String
.
valueOf
(
System
.
currentTimeMillis
())
:
state
;
}
/**
* 通用的 authorizationCode 协议
*
* @param code code码
* @return HttpResponse
*/
protected
HttpResponse
doPostAuthorizationCode
(
String
code
)
{
return
HttpRequest
.
post
(
accessTokenUrl
(
code
)).
execute
();
}
/**
* 通用的 authorizationCode 协议
*
* @param code code码
* @return HttpResponse
*/
protected
HttpResponse
doGetAuthorizationCode
(
String
code
)
{
return
HttpRequest
.
get
(
accessTokenUrl
(
code
)).
execute
();
}
/**
* 通用的 用户信息
*
* @param authToken token封装
* @return HttpResponse
*/
protected
HttpResponse
doPostUserInfo
(
AuthToken
authToken
)
{
return
HttpRequest
.
post
(
userInfoUrl
(
authToken
)).
execute
();
}
/**
* 通用的 用户信息
*
* @param authToken token封装
* @return HttpResponse
*/
protected
HttpResponse
doGetUserInfo
(
AuthToken
authToken
)
{
return
HttpRequest
.
get
(
userInfoUrl
(
authToken
)).
execute
();
}
}
src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java
浏览文件 @
d5e60165
...
...
@@ -12,9 +12,8 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthDingtalkUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.GlobalAuthUtil
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* 钉钉登录
...
...
@@ -26,7 +25,7 @@ import me.zhyd.oauth.utils.GlobalAuthUtil;
public
class
AuthDingTalkRequest
extends
AuthDefaultRequest
{
public
AuthDingTalkRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
DINGTALK
,
new
AuthDingtalkUrlBuilder
()
);
super
(
config
,
AuthSource
.
DINGTALK
);
}
@Override
...
...
@@ -37,17 +36,9 @@ public class AuthDingTalkRequest extends AuthDefaultRequest {
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
code
=
authToken
.
getAccessCode
();
// 根据timestamp, appSecret计算签名值
String
timestamp
=
System
.
currentTimeMillis
()
+
""
;
String
urlEncodeSignature
=
GlobalAuthUtil
.
generateDingTalkSignature
(
config
.
getClientSecret
(),
timestamp
);
JSONObject
param
=
new
JSONObject
();
param
.
put
(
"tmp_auth_code"
,
code
);
HttpResponse
response
=
HttpRequest
.
post
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
signature
(
urlEncodeSignature
)
.
timestamp
(
timestamp
)
.
clientId
(
config
.
getClientId
())
.
build
()
)).
body
(
param
.
toJSONString
()).
execute
();
HttpResponse
response
=
HttpRequest
.
post
(
userInfoUrl
(
authToken
)).
body
(
param
.
toJSONString
()).
execute
();
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSON
.
parseObject
(
userInfo
);
AuthDingTalkErrorCode
errorCode
=
AuthDingTalkErrorCode
.
getErrorCode
(
object
.
getIntValue
(
"errcode"
));
...
...
@@ -56,16 +47,51 @@ public class AuthDingTalkRequest extends AuthDefaultRequest {
}
object
=
object
.
getJSONObject
(
"user_info"
);
AuthToken
token
=
AuthToken
.
builder
()
.
openId
(
object
.
getString
(
"openid"
))
.
unionId
(
object
.
getString
(
"unionid"
))
.
build
();
.
openId
(
object
.
getString
(
"openid"
))
.
unionId
(
object
.
getString
(
"unionid"
))
.
build
();
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"unionid"
))
.
nickname
(
object
.
getString
(
"nick"
))
.
username
(
object
.
getString
(
"nick"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
source
(
AuthSource
.
DINGTALK
)
.
token
(
token
)
.
build
();
.
uuid
(
object
.
getString
(
"unionid"
))
.
nickname
(
object
.
getString
(
"nick"
))
.
username
(
object
.
getString
(
"nick"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
source
(
AuthSource
.
DINGTALK
)
.
token
(
token
)
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"appid"
,
config
.
getClientId
())
.
queryParam
(
"scope"
,
"snsapi_login"
)
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
// 根据timestamp, appSecret计算签名值
String
timestamp
=
System
.
currentTimeMillis
()
+
""
;
String
urlEncodeSignature
=
GlobalAuthUtil
.
generateDingTalkSignature
(
config
.
getClientSecret
(),
timestamp
);
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"signature"
,
urlEncodeSignature
)
.
queryParam
(
"timestamp"
,
timestamp
)
.
queryParam
(
"accessKey"
,
config
.
getClientId
())
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthDouyinRequest.java
浏览文件 @
d5e60165
...
...
@@ -7,8 +7,7 @@ import me.zhyd.oauth.config.AuthConfig;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthDouyinUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
...
...
@@ -21,47 +20,39 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthDouyinRequest
extends
AuthDefaultRequest
{
public
AuthDouyinRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
DOUYIN
,
new
AuthDouyinUrlBuilder
()
);
super
(
config
,
AuthSource
.
DOUYIN
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
return
this
.
getToken
(
accessTokenUrl
);
return
this
.
getToken
(
accessTokenUrl
(
authCallback
.
getCode
()));
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
String
openId
=
authToken
.
getOpenId
();
String
url
=
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
openId
(
openId
)
.
build
());
HttpResponse
response
=
HttpRequest
.
get
(
url
).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
JSONObject
object
=
JSONObject
.
parseObject
(
response
.
body
());
JSONObject
userInfoObject
=
this
.
checkResponse
(
object
);
return
AuthUser
.
builder
()
.
uuid
(
userInfoObject
.
getString
(
"union_id"
))
.
username
(
userInfoObject
.
getString
(
"nickname"
))
.
nickname
(
userInfoObject
.
getString
(
"nickname"
))
.
avatar
(
userInfoObject
.
getString
(
"avatar"
))
.
remark
(
userInfoObject
.
getString
(
"description"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
DOUYIN
)
.
build
();
.
uuid
(
userInfoObject
.
getString
(
"union_id"
))
.
username
(
userInfoObject
.
getString
(
"nickname"
))
.
nickname
(
userInfoObject
.
getString
(
"nickname"
))
.
avatar
(
userInfoObject
.
getString
(
"avatar"
))
.
remark
(
userInfoObject
.
getString
(
"description"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
DOUYIN
)
.
build
();
}
@Override
public
AuthResponse
refresh
(
AuthToken
oldToken
)
{
String
refreshTokenUrl
=
this
.
urlBuilder
.
getRefreshUrl
(
oldToken
.
getRefreshToken
());
return
AuthResponse
.
builder
()
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
this
.
getToken
(
refreshTokenUrl
))
.
build
();
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
refreshTokenUrl
(
oldToken
.
getRefreshToken
()
))
.
build
();
}
/**
...
...
@@ -93,11 +84,72 @@ public class AuthDouyinRequest extends AuthDefaultRequest {
JSONObject
accessTokenObject
=
this
.
checkResponse
(
object
);
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
openId
(
accessTokenObject
.
getString
(
"open_id"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
openId
(
accessTokenObject
.
getString
(
"open_id"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_key"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
queryParam
(
"scope"
,
"user_info"
)
.
build
();
}
/**
* 返回获取accessToken的url
*
* @param code
* @return 返回获取accessToken的url
*/
@Override
protected
String
accessTokenUrl
(
String
code
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
accessToken
())
.
queryParam
(
"code"
,
code
)
.
queryParam
(
"client_key"
,
config
.
getClientId
())
.
queryParam
(
"client_secret"
,
config
.
getClientSecret
())
.
queryParam
(
"grant_type"
,
"authorization_code"
)
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
queryParam
(
"open_id"
,
authToken
.
getOpenId
())
.
build
();
}
/**
* 返回获取accessToken的url
*
* @param refreshToken
* @return 返回获取accessToken的url
*/
@Override
protected
String
refreshTokenUrl
(
String
refreshToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
refresh
())
.
queryParam
(
"client_key"
,
config
.
getClientId
())
.
queryParam
(
"refresh_token"
,
refreshToken
)
.
queryParam
(
"grant_type"
,
"refresh_token"
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthFacebookRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
...
...
@@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthFacebookUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* Facebook登录
...
...
@@ -23,13 +21,12 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthFacebookRequest
extends
AuthDefaultRequest
{
public
AuthFacebookRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
FACEBOOK
,
new
AuthFacebookUrlBuilder
()
);
super
(
config
,
AuthSource
.
FACEBOOK
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
containsKey
(
"error"
))
{
...
...
@@ -37,18 +34,15 @@ public class AuthFacebookRequest extends AuthDefaultRequest {
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
tokenType
(
accessTokenObject
.
getString
(
"token_type"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
tokenType
(
accessTokenObject
.
getString
(
"token_type"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSONObject
.
parseObject
(
userInfo
);
if
(
object
.
containsKey
(
"error"
))
{
...
...
@@ -63,15 +57,29 @@ public class AuthFacebookRequest extends AuthDefaultRequest {
}
}
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
nickname
(
object
.
getString
(
"name"
))
.
avatar
(
picture
)
.
location
(
object
.
getString
(
"locale"
))
.
email
(
object
.
getString
(
"email"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"gender"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
FACEBOOK
)
.
build
();
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
nickname
(
object
.
getString
(
"name"
))
.
avatar
(
picture
)
.
location
(
object
.
getString
(
"locale"
))
.
email
(
object
.
getString
(
"email"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"gender"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
FACEBOOK
)
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
queryParam
(
"fields"
,
"id,name,birthday,gender,hometown,email,devices,picture.width(400)"
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
...
...
@@ -10,8 +9,6 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthGiteeUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
/**
* Gitee登录
...
...
@@ -23,13 +20,12 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthGiteeRequest
extends
AuthDefaultRequest
{
public
AuthGiteeRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
GITEE
,
new
AuthGiteeUrlBuilder
()
);
super
(
config
,
AuthSource
.
GITEE
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
containsKey
(
"error"
))
{
throw
new
AuthException
(
"Unable to get token from gitee using code ["
+
authCallback
.
getCode
()
+
"]: "
+
accessTokenObject
);
...
...
@@ -39,25 +35,22 @@ public class AuthGiteeRequest extends AuthDefaultRequest {
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSONObject
.
parseObject
(
userInfo
);
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"login"
))
.
avatar
(
object
.
getString
(
"avatar_url"
))
.
blog
(
object
.
getString
(
"blog"
))
.
nickname
(
object
.
getString
(
"name"
))
.
company
(
object
.
getString
(
"company"
))
.
location
(
object
.
getString
(
"address"
))
.
email
(
object
.
getString
(
"email"
))
.
remark
(
object
.
getString
(
"bio"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
GITEE
)
.
build
();
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"login"
))
.
avatar
(
object
.
getString
(
"avatar_url"
))
.
blog
(
object
.
getString
(
"blog"
))
.
nickname
(
object
.
getString
(
"name"
))
.
company
(
object
.
getString
(
"company"
))
.
location
(
object
.
getString
(
"address"
))
.
email
(
object
.
getString
(
"email"
))
.
remark
(
object
.
getString
(
"bio"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
GITEE
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthGithubRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
...
...
@@ -10,8 +9,6 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthGithubUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.GlobalAuthUtil
;
import
java.util.Map
;
...
...
@@ -26,13 +23,12 @@ import java.util.Map;
public
class
AuthGithubRequest
extends
AuthDefaultRequest
{
public
AuthGithubRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
GITHUB
,
new
AuthGithubUrlBuilder
()
);
super
(
config
,
AuthSource
.
GITHUB
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authCallback
.
getCode
());
Map
<
String
,
String
>
res
=
GlobalAuthUtil
.
parseStringToMap
(
response
.
body
());
if
(
res
.
containsKey
(
"error"
))
{
throw
new
AuthException
(
res
.
get
(
"error"
)
+
":"
+
res
.
get
(
"error_description"
));
...
...
@@ -42,25 +38,22 @@ public class AuthGithubRequest extends AuthDefaultRequest {
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSONObject
.
parseObject
(
userInfo
);
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"login"
))
.
avatar
(
object
.
getString
(
"avatar_url"
))
.
blog
(
object
.
getString
(
"blog"
))
.
nickname
(
object
.
getString
(
"name"
))
.
company
(
object
.
getString
(
"company"
))
.
location
(
object
.
getString
(
"location"
))
.
email
(
object
.
getString
(
"email"
))
.
remark
(
object
.
getString
(
"bio"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
GITHUB
)
.
build
();
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"login"
))
.
avatar
(
object
.
getString
(
"avatar_url"
))
.
blog
(
object
.
getString
(
"blog"
))
.
nickname
(
object
.
getString
(
"name"
))
.
company
(
object
.
getString
(
"company"
))
.
location
(
object
.
getString
(
"location"
))
.
email
(
object
.
getString
(
"email"
))
.
remark
(
object
.
getString
(
"bio"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
GITHUB
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthGoogleRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
...
...
@@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthGoogleUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* Google登录
...
...
@@ -23,47 +21,70 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthGoogleRequest
extends
AuthDefaultRequest
{
public
AuthGoogleRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
GOOGLE
,
new
AuthGoogleUrlBuilder
()
);
super
(
config
,
AuthSource
.
GOOGLE
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
containsKey
(
"error"
)
||
accessTokenObject
.
containsKey
(
"error_description"
))
{
throw
new
AuthException
(
"get google access_token has error:["
+
accessTokenObject
.
getString
(
"error"
)
+
"], error_description:["
+
accessTokenObject
.
getString
(
"error_description"
)
+
"]"
);
.
getString
(
"error_description"
)
+
"]"
);
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
tokenType
(
accessTokenObject
.
getString
(
"token_type"
))
.
idToken
(
accessTokenObject
.
getString
(
"id_token"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
tokenType
(
accessTokenObject
.
getString
(
"token_type"
))
.
idToken
(
accessTokenObject
.
getString
(
"id_token"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getIdToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSONObject
.
parseObject
(
userInfo
);
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"sub"
))
.
username
(
object
.
getString
(
"name"
))
.
avatar
(
object
.
getString
(
"picture"
))
.
nickname
(
object
.
getString
(
"name"
))
.
location
(
object
.
getString
(
"locale"
))
.
email
(
object
.
getString
(
"email"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
GOOGLE
)
.
build
();
.
uuid
(
object
.
getString
(
"sub"
))
.
username
(
object
.
getString
(
"name"
))
.
avatar
(
object
.
getString
(
"picture"
))
.
nickname
(
object
.
getString
(
"name"
))
.
location
(
object
.
getString
(
"locale"
))
.
email
(
object
.
getString
(
"email"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
GOOGLE
)
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"scope"
,
"openid%20email%20profile"
)
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
()).
queryParam
(
"id_token"
,
authToken
.
getAccessToken
()).
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java
浏览文件 @
d5e60165
...
...
@@ -8,9 +8,8 @@ import me.zhyd.oauth.config.AuthConfig;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthLinkedinUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.StringUtils
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
...
...
@@ -23,23 +22,22 @@ import me.zhyd.oauth.utils.StringUtils;
public
class
AuthLinkedinRequest
extends
AuthDefaultRequest
{
public
AuthLinkedinRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
LINKEDIN
,
new
AuthLinkedinUrlBuilder
()
);
super
(
config
,
AuthSource
.
LINKEDIN
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
return
this
.
getToken
(
accessTokenUrl
);
return
this
.
getToken
(
accessTokenUrl
(
authCallback
.
getCode
()));
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
().
build
()
))
.
header
(
"Host"
,
"api.linkedin.com"
)
.
header
(
"Connection"
,
"Keep-Alive"
)
.
header
(
"Authorization"
,
"Bearer "
+
accessToken
)
.
execute
();
HttpResponse
response
=
HttpRequest
.
get
(
userInfoUrl
(
authToken
))
.
header
(
"Host"
,
"api.linkedin.com"
)
.
header
(
"Connection"
,
"Keep-Alive"
)
.
header
(
"Authorization"
,
"Bearer "
+
accessToken
)
.
execute
();
JSONObject
userInfoObject
=
JSONObject
.
parseObject
(
response
.
body
());
this
.
checkResponse
(
userInfoObject
);
...
...
@@ -65,7 +63,7 @@ public class AuthLinkedinRequest extends AuthDefaultRequest {
JSONObject
profilePictureObject
=
userInfoObject
.
getJSONObject
(
"profilePicture"
);
if
(
profilePictureObject
.
containsKey
(
"displayImage~"
))
{
JSONArray
displayImageElements
=
profilePictureObject
.
getJSONObject
(
"displayImage~"
)
.
getJSONArray
(
"elements"
);
.
getJSONArray
(
"elements"
);
if
(
null
!=
displayImageElements
&&
displayImageElements
.
size
()
>
0
)
{
JSONObject
largestImageObj
=
displayImageElements
.
getJSONObject
(
displayImageElements
.
size
()
-
1
);
avatar
=
largestImageObj
.
getJSONArray
(
"identifiers"
).
getJSONObject
(
0
).
getString
(
"identifier"
);
...
...
@@ -75,31 +73,31 @@ public class AuthLinkedinRequest extends AuthDefaultRequest {
// 获取用户邮箱地址
String
email
=
this
.
getUserEmail
(
accessToken
);
return
AuthUser
.
builder
()
.
uuid
(
userInfoObject
.
getString
(
"id"
))
.
username
(
userName
)
.
nickname
(
userName
)
.
avatar
(
avatar
)
.
email
(
email
)
.
token
(
authToken
)
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
source
(
AuthSource
.
LINKEDIN
)
.
build
();
.
uuid
(
userInfoObject
.
getString
(
"id"
))
.
username
(
userName
)
.
nickname
(
userName
)
.
avatar
(
avatar
)
.
email
(
email
)
.
token
(
authToken
)
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
source
(
AuthSource
.
LINKEDIN
)
.
build
();
}
private
String
getUserEmail
(
String
accessToken
)
{
String
email
=
null
;
HttpResponse
emailResponse
=
HttpRequest
.
get
(
"https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))"
)
.
header
(
"Host"
,
"api.linkedin.com"
)
.
header
(
"Connection"
,
"Keep-Alive"
)
.
header
(
"Authorization"
,
"Bearer "
+
accessToken
)
.
execute
();
.
header
(
"Host"
,
"api.linkedin.com"
)
.
header
(
"Connection"
,
"Keep-Alive"
)
.
header
(
"Authorization"
,
"Bearer "
+
accessToken
)
.
execute
();
System
.
out
.
println
(
emailResponse
.
body
());
JSONObject
emailObj
=
JSONObject
.
parseObject
(
emailResponse
.
body
());
if
(
emailObj
.
containsKey
(
"elements"
))
{
email
=
emailObj
.
getJSONArray
(
"elements"
)
.
getJSONObject
(
0
)
.
getJSONObject
(
"handle~"
)
.
getString
(
"emailAddress"
);
.
getJSONObject
(
0
)
.
getJSONObject
(
"handle~"
)
.
getString
(
"emailAddress"
);
}
return
email
;
}
...
...
@@ -115,14 +113,15 @@ public class AuthLinkedinRequest extends AuthDefaultRequest {
@Override
public
AuthResponse
refresh
(
AuthToken
oldToken
)
{
if
(
StringUtils
.
isEmpty
(
oldToken
.
getRefreshToken
()))
{
String
refreshToken
=
oldToken
.
getRefreshToken
();
if
(
StringUtils
.
isEmpty
(
refreshToken
))
{
throw
new
AuthException
(
AuthResponseStatus
.
UNSUPPORTED
);
}
String
refreshTokenUrl
=
this
.
urlBuilder
.
getRefreshUrl
(
oldToken
.
getRefreshToken
()
);
String
refreshTokenUrl
=
refreshTokenUrl
(
refreshToken
);
return
AuthResponse
.
builder
()
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
this
.
getToken
(
refreshTokenUrl
))
.
build
();
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
this
.
getToken
(
refreshTokenUrl
))
.
build
();
}
private
void
checkResponse
(
JSONObject
userInfoObject
)
{
...
...
@@ -139,18 +138,47 @@ public class AuthLinkedinRequest extends AuthDefaultRequest {
*/
private
AuthToken
getToken
(
String
accessTokenUrl
)
{
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
)
.
header
(
"Host"
,
"www.linkedin.com"
)
.
contentType
(
"application/x-www-form-urlencoded"
)
.
execute
();
.
header
(
"Host"
,
"www.linkedin.com"
)
.
contentType
(
"application/x-www-form-urlencoded"
)
.
execute
();
String
accessTokenStr
=
response
.
body
();
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
accessTokenStr
);
this
.
checkResponse
(
accessTokenObject
);
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
queryParam
(
"scope"
,
"r_liteprofile%20r_emailaddress%20w_member_social"
)
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"projection"
,
"(id,firstName,lastName,profilePicture(displayImage~:playableStreams))"
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthMiRequest.java
浏览文件 @
d5e60165
...
...
@@ -9,8 +9,7 @@ import me.zhyd.oauth.config.AuthConfig;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthMiUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
import
java.text.MessageFormat
;
...
...
@@ -26,13 +25,12 @@ public class AuthMiRequest extends AuthDefaultRequest {
private
static
final
String
PREFIX
=
"&&&START&&&"
;
public
AuthMiRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
MI
,
new
AuthMiUrlBuilder
()
);
super
(
config
,
AuthSource
.
MI
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
return
getToken
(
accessTokenUrl
);
return
getToken
(
accessTokenUrl
(
authCallback
.
getCode
()));
}
private
AuthToken
getToken
(
String
accessTokenUrl
)
{
...
...
@@ -45,25 +43,21 @@ public class AuthMiRequest extends AuthDefaultRequest {
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
tokenType
(
accessTokenObject
.
getString
(
"token_type"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
openId
(
accessTokenObject
.
getString
(
"openId"
))
.
macAlgorithm
(
accessTokenObject
.
getString
(
"mac_algorithm"
))
.
macKey
(
accessTokenObject
.
getString
(
"mac_key"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
tokenType
(
accessTokenObject
.
getString
(
"token_type"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
openId
(
accessTokenObject
.
getString
(
"openId"
))
.
macAlgorithm
(
accessTokenObject
.
getString
(
"mac_algorithm"
))
.
macKey
(
accessTokenObject
.
getString
(
"mac_key"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
// 获取用户信息
HttpResponse
userResponse
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
clientId
(
config
.
getClientId
())
.
accessToken
(
authToken
.
getAccessToken
())
.
build
()))
.
execute
();
HttpResponse
userResponse
=
doGetUserInfo
(
authToken
);
JSONObject
userProfile
=
JSONObject
.
parseObject
(
userResponse
.
body
());
if
(
"error"
.
equalsIgnoreCase
(
userProfile
.
getString
(
"result"
)))
{
...
...
@@ -73,19 +67,19 @@ public class AuthMiRequest extends AuthDefaultRequest {
JSONObject
user
=
userProfile
.
getJSONObject
(
"data"
);
AuthUser
authUser
=
AuthUser
.
builder
()
.
uuid
(
authToken
.
getOpenId
())
.
username
(
user
.
getString
(
"miliaoNick"
))
.
nickname
(
user
.
getString
(
"miliaoNick"
))
.
avatar
(
user
.
getString
(
"miliaoIcon"
))
.
email
(
user
.
getString
(
"mail"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
MI
)
.
build
();
.
uuid
(
authToken
.
getOpenId
())
.
username
(
user
.
getString
(
"miliaoNick"
))
.
nickname
(
user
.
getString
(
"miliaoNick"
))
.
avatar
(
user
.
getString
(
"miliaoIcon"
))
.
email
(
user
.
getString
(
"mail"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
MI
)
.
build
();
// 获取用户邮箱手机号等信息
String
emailPhoneUrl
=
MessageFormat
.
format
(
"{0}?clientId={1}&token={2}"
,
"https://open.account.xiaomi.com/user/phoneAndEmail"
,
config
.
getClientId
(),
authToken
.
getAccessToken
());
.
getClientId
(),
authToken
.
getAccessToken
());
HttpResponse
emailResponse
=
HttpRequest
.
get
(
emailPhoneUrl
).
execute
();
JSONObject
userEmailPhone
=
JSONObject
.
parseObject
(
emailResponse
.
body
());
...
...
@@ -107,8 +101,40 @@ public class AuthMiRequest extends AuthDefaultRequest {
*/
@Override
public
AuthResponse
refresh
(
AuthToken
authToken
)
{
String
miRefreshUrl
=
this
.
urlBuilder
.
getRefreshUrl
(
authToken
.
getRefreshToken
());
return
AuthResponse
.
builder
()
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
getToken
(
refreshTokenUrl
(
authToken
.
getRefreshToken
())))
.
build
();
}
return
AuthResponse
.
builder
().
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
()).
data
(
getToken
(
miRefreshUrl
)).
build
();
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
queryParam
(
"scope"
,
"user/profile%20user/openIdV2%20user/phoneAndEmail"
)
.
queryParam
(
"skip_confirm"
,
"false"
)
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"clientId"
,
config
.
getClientId
())
.
queryParam
(
"token"
,
authToken
.
getAccessToken
())
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthMicrosoftRequest.java
浏览文件 @
d5e60165
...
...
@@ -8,8 +8,7 @@ import me.zhyd.oauth.config.AuthConfig;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthMicrosoftUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
import
java.util.HashMap
;
import
java.util.Map
;
...
...
@@ -25,14 +24,12 @@ import static me.zhyd.oauth.utils.GlobalAuthUtil.parseQueryToMap;
*/
public
class
AuthMicrosoftRequest
extends
AuthDefaultRequest
{
public
AuthMicrosoftRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
MICROSOFT
,
new
AuthMicrosoftUrlBuilder
()
);
super
(
config
,
AuthSource
.
MICROSOFT
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
return
getToken
(
accessTokenUrl
);
return
getToken
(
accessTokenUrl
(
authCallback
.
getCode
()));
}
/**
...
...
@@ -43,22 +40,22 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest {
*/
private
AuthToken
getToken
(
String
accessTokenUrl
)
{
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
)
.
header
(
"Host"
,
"https://login.microsoftonline.com"
)
.
contentType
(
"application/x-www-form-urlencoded"
)
.
form
(
parseQueryToMap
(
accessTokenUrl
))
.
execute
();
.
header
(
"Host"
,
"https://login.microsoftonline.com"
)
.
contentType
(
"application/x-www-form-urlencoded"
)
.
form
(
parseQueryToMap
(
accessTokenUrl
))
.
execute
();
String
accessTokenStr
=
response
.
body
();
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
accessTokenStr
);
this
.
checkResponse
(
accessTokenObject
);
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
tokenType
(
accessTokenObject
.
getString
(
"token_type"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
scope
(
accessTokenObject
.
getString
(
"scope"
))
.
tokenType
(
accessTokenObject
.
getString
(
"token_type"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
}
private
void
checkResponse
(
JSONObject
response
)
{
...
...
@@ -72,21 +69,19 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest {
String
token
=
authToken
.
getAccessToken
();
String
tokenType
=
authToken
.
getTokenType
();
String
jwt
=
tokenType
+
" "
+
token
;
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
().
build
()))
.
header
(
"Authorization"
,
jwt
)
.
execute
();
HttpResponse
response
=
HttpRequest
.
get
(
userInfoUrl
(
authToken
)).
header
(
"Authorization"
,
jwt
).
execute
();
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSONObject
.
parseObject
(
userInfo
);
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"userPrincipalName"
))
.
nickname
(
object
.
getString
(
"displayName"
))
.
location
(
object
.
getString
(
"officeLocation"
))
.
email
(
object
.
getString
(
"mail"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
MICROSOFT
)
.
build
();
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"userPrincipalName"
))
.
nickname
(
object
.
getString
(
"displayName"
))
.
location
(
object
.
getString
(
"officeLocation"
))
.
email
(
object
.
getString
(
"mail"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
MICROSOFT
)
.
build
();
}
/**
...
...
@@ -97,8 +92,73 @@ public class AuthMicrosoftRequest extends AuthDefaultRequest {
*/
@Override
public
AuthResponse
refresh
(
AuthToken
authToken
)
{
String
refreshTokenUrl
=
this
.
urlBuilder
.
getRefreshUrl
(
authToken
.
getRefreshToken
());
return
AuthResponse
.
builder
()
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
getToken
(
refreshTokenUrl
(
authToken
.
getRefreshToken
())))
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"response_mode"
,
"query"
)
.
queryParam
(
"scope"
,
"offline_access%20user.read%20mail.read"
)
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
build
();
}
/**
* 返回获取accessToken的url
*
* @param code
* @return 返回获取accessToken的url
*/
@Override
protected
String
accessTokenUrl
(
String
code
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
accessToken
())
.
queryParam
(
"code"
,
code
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"client_secret"
,
config
.
getClientSecret
())
.
queryParam
(
"grant_type"
,
"authorization_code"
)
.
queryParam
(
"scope"
,
"user.read%20mail.read"
)
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
()).
build
();
}
return
AuthResponse
.
builder
().
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
()).
data
(
getToken
(
refreshTokenUrl
)).
build
();
/**
* 返回获取accessToken的url
*
* @param refreshToken
* @return 返回获取accessToken的url
*/
@Override
protected
String
refreshTokenUrl
(
String
refreshToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
refresh
())
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"client_secret"
,
config
.
getClientSecret
())
.
queryParam
(
"refresh_token"
,
refreshToken
)
.
queryParam
(
"grant_type"
,
"refresh_token"
)
.
queryParam
(
"scope"
,
"user.read%20mail.read"
)
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthOschinaRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
...
...
@@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthOschinaUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* oschina登录
...
...
@@ -23,46 +21,74 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthOschinaRequest
extends
AuthDefaultRequest
{
public
AuthOschinaRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
OSCHINA
,
new
AuthOschinaUrlBuilder
()
);
super
(
config
,
AuthSource
.
OSCHINA
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
containsKey
(
"error"
))
{
throw
new
AuthException
(
"Unable to get token from oschina using code ["
+
authCallback
.
getCode
()
+
"]: "
+
accessTokenObject
);
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
uid
(
accessTokenObject
.
getString
(
"uid"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
uid
(
accessTokenObject
.
getString
(
"uid"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
JSONObject
object
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
object
.
containsKey
(
"error"
))
{
throw
new
AuthException
(
object
.
getString
(
"error_description"
));
}
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
nickname
(
object
.
getString
(
"name"
))
.
avatar
(
object
.
getString
(
"avatar"
))
.
blog
(
object
.
getString
(
"url"
))
.
location
(
object
.
getString
(
"location"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"gender"
)))
.
email
(
object
.
getString
(
"email"
))
.
token
(
authToken
)
.
source
(
AuthSource
.
OSCHINA
)
.
build
();
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
nickname
(
object
.
getString
(
"name"
))
.
avatar
(
object
.
getString
(
"avatar"
))
.
blog
(
object
.
getString
(
"url"
))
.
location
(
object
.
getString
(
"location"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"gender"
)))
.
email
(
object
.
getString
(
"email"
))
.
token
(
authToken
)
.
source
(
AuthSource
.
OSCHINA
)
.
build
();
}
/**
* 返回获取accessToken的url
*
* @param code
* @return 返回获取accessToken的url
*/
@Override
protected
String
accessTokenUrl
(
String
code
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
accessToken
())
.
queryParam
(
"code"
,
code
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"client_secret"
,
config
.
getClientSecret
())
.
queryParam
(
"grant_type"
,
"authorization_code"
)
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"dataType"
,
"json"
)
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
queryParam
(
"dataType"
,
"json"
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthQqRequest.java
浏览文件 @
d5e60165
...
...
@@ -11,10 +11,9 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthQqUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.GlobalAuthUtil
;
import
me.zhyd.oauth.utils.StringUtils
;
import
me.zhyd.oauth.utils.UrlBuilder
;
import
java.util.Map
;
...
...
@@ -28,34 +27,27 @@ import java.util.Map;
*/
public
class
AuthQqRequest
extends
AuthDefaultRequest
{
public
AuthQqRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
QQ
,
new
AuthQqUrlBuilder
()
);
super
(
config
,
AuthSource
.
QQ
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
get
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doGetAuthorizationCode
(
authCallback
.
getCode
());
Map
<
String
,
String
>
accessTokenObject
=
GlobalAuthUtil
.
parseStringToMap
(
response
.
body
());
if
(!
accessTokenObject
.
containsKey
(
"access_token"
))
{
throw
new
AuthException
(
"Unable to get token from qq using code ["
+
authCallback
.
getCode
()
+
"]: "
+
accessTokenObject
);
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
get
(
"access_token"
))
.
expireIn
(
Integer
.
valueOf
(
accessTokenObject
.
get
(
"expires_in"
)))
.
refreshToken
(
accessTokenObject
.
get
(
"refresh_token"
))
.
build
();
.
accessToken
(
accessTokenObject
.
get
(
"access_token"
))
.
expireIn
(
Integer
.
valueOf
(
accessTokenObject
.
get
(
"expires_in"
)))
.
refreshToken
(
accessTokenObject
.
get
(
"refresh_token"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
String
openId
=
this
.
getOpenId
(
authToken
);
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
clientId
(
config
.
getClientId
())
.
accessToken
(
accessToken
)
.
openId
(
openId
)
.
build
()))
.
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
JSONObject
object
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
object
.
getIntValue
(
"ret"
)
!=
0
)
{
throw
new
AuthException
(
object
.
getString
(
"msg"
));
...
...
@@ -67,20 +59,22 @@ public class AuthQqRequest extends AuthDefaultRequest {
String
location
=
String
.
format
(
"%s-%s"
,
object
.
getString
(
"province"
),
object
.
getString
(
"city"
));
return
AuthUser
.
builder
()
.
username
(
object
.
getString
(
"nickname"
))
.
nickname
(
object
.
getString
(
"nickname"
))
.
avatar
(
avatar
)
.
location
(
location
)
.
uuid
(
openId
)
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"gender"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
QQ
)
.
build
();
.
username
(
object
.
getString
(
"nickname"
))
.
nickname
(
object
.
getString
(
"nickname"
))
.
avatar
(
avatar
)
.
location
(
location
)
.
uuid
(
openId
)
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"gender"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
QQ
)
.
build
();
}
private
String
getOpenId
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getOpenIdUrl
(
accessToken
,
config
.
isUnionId
())).
execute
();
HttpResponse
response
=
HttpRequest
.
get
(
UrlBuilder
.
fromBaseUrl
(
"https://graph.qq.com/oauth2.0/me"
)
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
queryParam
(
"unionid"
,
config
.
isUnionId
()
?
1
:
0
)
.
build
()).
execute
();
if
(
response
.
isOk
())
{
String
body
=
response
.
body
();
String
removePrefix
=
StrUtil
.
replace
(
body
,
"callback("
,
""
);
...
...
@@ -99,4 +93,19 @@ public class AuthQqRequest extends AuthDefaultRequest {
throw
new
AuthException
(
"request error"
);
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
queryParam
(
"oauth_consumer_key"
,
config
.
getClientId
())
.
queryParam
(
"openid"
,
authToken
.
getOpenId
())
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthRenrenRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
...
...
@@ -11,8 +10,7 @@ import me.zhyd.oauth.model.AuthResponse;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthRenrenUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
import
java.util.Objects
;
...
...
@@ -29,7 +27,7 @@ import static me.zhyd.oauth.model.AuthResponseStatus.SUCCESS;
public
class
AuthRenrenRequest
extends
AuthDefaultRequest
{
public
AuthRenrenRequest
(
AuthConfig
config
)
{
super
(
config
,
RENREN
,
new
AuthRenrenUrlBuilder
()
);
super
(
config
,
RENREN
);
}
@Override
...
...
@@ -39,10 +37,9 @@ public class AuthRenrenRequest extends AuthDefaultRequest {
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
openId
(
authToken
.
getOpenId
())
.
accessToken
(
authToken
.
getAccessToken
())
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
JSONObject
userObj
=
JSONObject
.
parseObject
(
response
.
body
()).
getJSONObject
(
"response"
);
return
AuthUser
.
builder
()
...
...
@@ -103,4 +100,18 @@ public class AuthRenrenRequest extends AuthDefaultRequest {
}
return
jsonArray
.
getJSONObject
(
0
).
getString
(
"name"
);
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
queryParam
(
"userId"
,
authToken
.
getOpenId
())
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthTaobaoUrlBuilder
;
import
me.zhyd.oauth.model.AuthCallback
;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.utils.GlobalAuthUtil
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* 淘宝登录
...
...
@@ -20,7 +22,7 @@ import me.zhyd.oauth.utils.GlobalAuthUtil;
public
class
AuthTaobaoRequest
extends
AuthDefaultRequest
{
public
AuthTaobaoRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
TAOBAO
,
new
AuthTaobaoUrlBuilder
()
);
super
(
config
,
AuthSource
.
TAOBAO
);
}
@Override
...
...
@@ -30,8 +32,7 @@ public class AuthTaobaoRequest extends AuthDefaultRequest {
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessCode
=
authToken
.
getAccessCode
();
HttpResponse
response
=
HttpRequest
.
post
(
this
.
urlBuilder
.
getAccessTokenUrl
(
accessCode
)).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authToken
.
getAccessCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
containsKey
(
"error"
))
{
throw
new
AuthException
(
accessTokenObject
.
getString
(
"error_description"
));
...
...
@@ -44,12 +45,28 @@ public class AuthTaobaoRequest extends AuthDefaultRequest {
String
nick
=
GlobalAuthUtil
.
urlDecode
(
accessTokenObject
.
getString
(
"taobao_user_nick"
));
return
AuthUser
.
builder
()
.
uuid
(
accessTokenObject
.
getString
(
"taobao_user_id"
))
.
username
(
nick
)
.
nickname
(
nick
)
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
TAOBAO
)
.
build
();
.
uuid
(
accessTokenObject
.
getString
(
"taobao_user_id"
))
.
username
(
nick
)
.
nickname
(
nick
)
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
TAOBAO
)
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
queryParam
(
"view"
,
"web"
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthTeambitionRequest.java
浏览文件 @
d5e60165
...
...
@@ -7,7 +7,6 @@ import me.zhyd.oauth.config.AuthConfig;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthTeambitionUrlBuilder
;
/**
* Teambition授权登录
...
...
@@ -19,7 +18,7 @@ import me.zhyd.oauth.url.AuthTeambitionUrlBuilder;
public
class
AuthTeambitionRequest
extends
AuthDefaultRequest
{
public
AuthTeambitionRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
TEAMBITION
,
new
AuthTeambitionUrlBuilder
()
);
super
(
config
,
AuthSource
.
TEAMBITION
);
}
/**
...
...
@@ -28,30 +27,29 @@ public class AuthTeambitionRequest extends AuthDefaultRequest {
*/
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
)
.
form
(
"client_id"
,
config
.
getClientId
())
.
form
(
"client_secret"
,
config
.
getClientSecret
())
.
form
(
"code"
,
authCallback
.
getCode
())
.
form
(
"grant_type"
,
"code"
)
.
execute
();
HttpResponse
response
=
HttpRequest
.
post
(
source
.
accessToken
())
.
form
(
"client_id"
,
config
.
getClientId
())
.
form
(
"client_secret"
,
config
.
getClientSecret
())
.
form
(
"code"
,
authCallback
.
getCode
())
.
form
(
"grant_type"
,
"code"
)
.
execute
();
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
this
.
checkResponse
(
accessTokenObject
);
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
null
))
.
header
(
"Authorization"
,
"OAuth2 "
+
accessToken
)
.
execute
();
HttpResponse
response
=
HttpRequest
.
get
(
source
.
userInfo
(
))
.
header
(
"Authorization"
,
"OAuth2 "
+
accessToken
)
.
execute
();
JSONObject
object
=
JSONObject
.
parseObject
(
response
.
body
());
this
.
checkResponse
(
object
);
...
...
@@ -59,39 +57,38 @@ public class AuthTeambitionRequest extends AuthDefaultRequest {
authToken
.
setUid
(
object
.
getString
(
"_id"
));
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"_id"
))
.
username
(
object
.
getString
(
"name"
))
.
nickname
(
object
.
getString
(
"name"
))
.
avatar
(
object
.
getString
(
"avatarUrl"
))
.
blog
(
object
.
getString
(
"website"
))
.
location
(
object
.
getString
(
"location"
))
.
email
(
object
.
getString
(
"email"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
TEAMBITION
)
.
build
();
.
uuid
(
object
.
getString
(
"_id"
))
.
username
(
object
.
getString
(
"name"
))
.
nickname
(
object
.
getString
(
"name"
))
.
avatar
(
object
.
getString
(
"avatarUrl"
))
.
blog
(
object
.
getString
(
"website"
))
.
location
(
object
.
getString
(
"location"
))
.
email
(
object
.
getString
(
"email"
))
.
gender
(
AuthUserGender
.
UNKNOWN
)
.
token
(
authToken
)
.
source
(
AuthSource
.
TEAMBITION
)
.
build
();
}
@Override
public
AuthResponse
refresh
(
AuthToken
oldToken
)
{
String
uid
=
oldToken
.
getUid
();
String
refreshToken
=
oldToken
.
getRefreshToken
();
String
refreshTokenUrl
=
this
.
urlBuilder
.
getRefreshUrl
(
refreshToken
);
HttpResponse
response
=
HttpRequest
.
post
(
refreshTokenUrl
)
.
form
(
"_userId"
,
uid
)
.
form
(
"refresh_token"
,
refreshToken
)
.
execute
();
HttpResponse
response
=
HttpRequest
.
post
(
source
.
refresh
())
.
form
(
"_userId"
,
uid
)
.
form
(
"refresh_token"
,
refreshToken
)
.
execute
();
JSONObject
refreshTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
this
.
checkResponse
(
refreshTokenObject
);
return
AuthResponse
.
builder
()
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
AuthToken
.
builder
()
.
accessToken
(
refreshTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
refreshTokenObject
.
getString
(
"refresh_token"
))
.
build
())
.
build
();
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
AuthToken
.
builder
()
.
accessToken
(
refreshTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
refreshTokenObject
.
getString
(
"refresh_token"
))
.
build
())
.
build
();
}
/**
...
...
src/main/java/me/zhyd/oauth/request/AuthTencentCloudRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
...
...
@@ -10,8 +9,7 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthTencentCloudUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* 腾讯云登录
...
...
@@ -23,48 +21,61 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthTencentCloudRequest
extends
AuthDefaultRequest
{
public
AuthTencentCloudRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
TENCENT_CLOUD
,
new
AuthTencentCloudUrlBuilder
()
);
super
(
config
,
AuthSource
.
TENCENT_CLOUD
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
get
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doGetAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
getIntValue
(
"code"
)
!=
0
)
{
throw
new
AuthException
(
"Unable to get token from tencent cloud using code ["
+
authCallback
.
getCode
()
+
"]: "
+
accessTokenObject
.
get
(
"msg"
));
throw
new
AuthException
(
"Unable to get token from tencent cloud using code ["
+
authCallback
.
getCode
()
+
"]: "
+
accessTokenObject
.
get
(
"msg"
));
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
JSONObject
object
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
object
.
getIntValue
(
"code"
)
!=
0
)
{
throw
new
AuthException
(
object
.
getString
(
"msg"
));
}
object
=
object
.
getJSONObject
(
"data"
);
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
avatar
(
"https://dev.tencent.com/"
+
object
.
getString
(
"avatar"
))
.
blog
(
"https://dev.tencent.com/"
+
object
.
getString
(
"path"
))
.
nickname
(
object
.
getString
(
"name"
))
.
company
(
object
.
getString
(
"company"
))
.
location
(
object
.
getString
(
"location"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"sex"
)))
.
email
(
object
.
getString
(
"email"
))
.
remark
(
object
.
getString
(
"slogan"
))
.
token
(
authToken
)
.
source
(
AuthSource
.
TENCENT_CLOUD
)
.
build
();
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
avatar
(
"https://dev.tencent.com/"
+
object
.
getString
(
"avatar"
))
.
blog
(
"https://dev.tencent.com/"
+
object
.
getString
(
"path"
))
.
nickname
(
object
.
getString
(
"name"
))
.
company
(
object
.
getString
(
"company"
))
.
location
(
object
.
getString
(
"location"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"sex"
)))
.
email
(
object
.
getString
(
"email"
))
.
remark
(
object
.
getString
(
"slogan"
))
.
token
(
authToken
)
.
source
(
AuthSource
.
TENCENT_CLOUD
)
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_id"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"scope"
,
"user"
)
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthToutiaoRequest.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.request
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhyd.oauth.config.AuthConfig
;
...
...
@@ -11,8 +10,7 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthToutiaoUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* 今日头条登录
...
...
@@ -24,32 +22,29 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
public
class
AuthToutiaoRequest
extends
AuthDefaultRequest
{
public
AuthToutiaoRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
TOUTIAO
,
new
AuthToutiaoUrlBuilder
()
);
super
(
config
,
AuthSource
.
TOUTIAO
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
get
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doGetAuthorizationCode
(
authCallback
.
getCode
());
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
response
.
body
());
if
(
accessTokenObject
.
containsKey
(
"error_code"
))
{
throw
new
AuthException
(
AuthToutiaoErrorCode
.
getErrorCode
(
accessTokenObject
.
getIntValue
(
"error_code"
)).
getDesc
());
throw
new
AuthException
(
AuthToutiaoErrorCode
.
getErrorCode
(
accessTokenObject
.
getIntValue
(
"error_code"
))
.
getDesc
());
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
openId
(
accessTokenObject
.
getString
(
"open_id"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
openId
(
accessTokenObject
.
getString
(
"open_id"
))
.
build
();
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
HttpResponse
userResponse
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
clientId
(
config
.
getClientId
())
.
accessToken
(
authToken
.
getAccessToken
())
.
build
())).
execute
();
HttpResponse
userResponse
=
doGetUserInfo
(
authToken
);
JSONObject
userProfile
=
JSONObject
.
parseObject
(
userResponse
.
body
());
...
...
@@ -63,14 +58,61 @@ public class AuthToutiaoRequest extends AuthDefaultRequest {
String
anonymousUserName
=
"匿名用户"
;
return
AuthUser
.
builder
()
.
uuid
(
user
.
getString
(
"uid"
))
.
username
(
isAnonymousUser
?
anonymousUserName
:
user
.
getString
(
"screen_name"
))
.
nickname
(
isAnonymousUser
?
anonymousUserName
:
user
.
getString
(
"screen_name"
))
.
avatar
(
user
.
getString
(
"avatar_url"
))
.
remark
(
user
.
getString
(
"description"
))
.
gender
(
AuthUserGender
.
getRealGender
(
user
.
getString
(
"gender"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
TOUTIAO
)
.
build
();
.
uuid
(
user
.
getString
(
"uid"
))
.
username
(
isAnonymousUser
?
anonymousUserName
:
user
.
getString
(
"screen_name"
))
.
nickname
(
isAnonymousUser
?
anonymousUserName
:
user
.
getString
(
"screen_name"
))
.
avatar
(
user
.
getString
(
"avatar_url"
))
.
remark
(
user
.
getString
(
"description"
))
.
gender
(
AuthUserGender
.
getRealGender
(
user
.
getString
(
"gender"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
TOUTIAO
)
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"client_key"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()))
.
queryParam
(
"auth_only"
,
1
)
.
queryParam
(
"display"
,
0
)
.
build
();
}
/**
* 返回获取accessToken的url
*
* @param code
* @return 返回获取accessToken的url
*/
@Override
protected
String
accessTokenUrl
(
String
code
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
accessToken
())
.
queryParam
(
"code"
,
code
)
.
queryParam
(
"client_key"
,
config
.
getClientId
())
.
queryParam
(
"client_secret"
,
config
.
getClientSecret
())
.
queryParam
(
"grant_type"
,
"authorization_code"
)
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"client_key"
,
config
.
getClientId
())
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java
浏览文件 @
d5e60165
...
...
@@ -7,8 +7,7 @@ import me.zhyd.oauth.config.AuthConfig;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.*
;
import
me.zhyd.oauth.url.AuthWechatUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
* 微信登录
...
...
@@ -19,7 +18,7 @@ import me.zhyd.oauth.url.entity.AuthUserInfoEntity;
*/
public
class
AuthWeChatRequest
extends
AuthDefaultRequest
{
public
AuthWeChatRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
WECHAT
,
new
AuthWechatUrlBuilder
()
);
super
(
config
,
AuthSource
.
WECHAT
);
}
/**
...
...
@@ -30,48 +29,42 @@ public class AuthWeChatRequest extends AuthDefaultRequest {
*/
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
return
this
.
getToken
(
accessTokenUrl
);
return
this
.
getToken
(
accessTokenUrl
(
authCallback
.
getCode
()));
}
@Override
protected
AuthUser
getUserInfo
(
AuthToken
authToken
)
{
String
accessToken
=
authToken
.
getAccessToken
();
String
openId
=
authToken
.
getOpenId
();
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
accessToken
(
accessToken
)
.
openId
(
openId
)
.
build
())).
execute
();
HttpResponse
response
=
doGetUserInfo
(
authToken
);
JSONObject
object
=
JSONObject
.
parseObject
(
response
.
body
());
this
.
checkResponse
(
object
);
String
location
=
String
.
format
(
"%s-%s-%s"
,
object
.
getString
(
"country"
),
object
.
getString
(
"province"
),
object
.
getString
(
"city"
));
if
(
object
.
containsKey
(
"unionid"
)){
if
(
object
.
containsKey
(
"unionid"
))
{
authToken
.
setUnionId
(
object
.
getString
(
"unionid"
));
}
return
AuthUser
.
builder
()
.
username
(
object
.
getString
(
"nickname"
))
.
nickname
(
object
.
getString
(
"nickname"
))
.
avatar
(
object
.
getString
(
"headimgurl"
))
.
location
(
location
)
.
uuid
(
openId
)
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"sex"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
WECHAT
)
.
build
();
.
username
(
object
.
getString
(
"nickname"
))
.
nickname
(
object
.
getString
(
"nickname"
))
.
avatar
(
object
.
getString
(
"headimgurl"
))
.
location
(
location
)
.
uuid
(
openId
)
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"sex"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
WECHAT
)
.
build
();
}
@Override
public
AuthResponse
refresh
(
AuthToken
oldToken
)
{
String
refreshTokenUrl
=
this
.
urlBuilder
.
getRefreshUrl
(
oldToken
.
getRefreshToken
());
return
AuthResponse
.
builder
()
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
this
.
getToken
(
refreshTokenUrl
))
.
build
();
.
code
(
AuthResponseStatus
.
SUCCESS
.
getCode
())
.
data
(
this
.
getToken
(
refreshTokenUrl
(
oldToken
.
getRefreshToken
())
))
.
build
();
}
/**
...
...
@@ -98,10 +91,72 @@ public class AuthWeChatRequest extends AuthDefaultRequest {
this
.
checkResponse
(
accessTokenObject
);
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
openId
(
accessTokenObject
.
getString
(
"openid"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
refreshToken
(
accessTokenObject
.
getString
(
"refresh_token"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
openId
(
accessTokenObject
.
getString
(
"openid"
))
.
build
();
}
/**
* 返回认证url,可自行跳转页面
*
* @return 返回授权地址
*/
@Override
public
String
authorize
()
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
authorize
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"appid"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"scope"
,
"snsapi_login"
)
.
queryParam
(
"state"
,
getRealState
(
config
.
getState
()).
concat
(
"#wechat_redirect"
))
.
build
();
}
/**
* 返回获取accessToken的url
*
* @param code
* @return 返回获取accessToken的url
*/
@Override
protected
String
accessTokenUrl
(
String
code
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
accessToken
())
.
queryParam
(
"code"
,
code
)
.
queryParam
(
"appid"
,
config
.
getClientId
())
.
queryParam
(
"secret"
,
config
.
getClientSecret
())
.
queryParam
(
"grant_type"
,
"authorization_code"
)
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
queryParam
(
"openid"
,
authToken
.
getOpenId
())
.
queryParam
(
"lang"
,
"zh_CN"
)
.
build
();
}
/**
* 返回获取accessToken的url
*
* @param refreshToken
* @return 返回获取accessToken的url
*/
@Override
protected
String
refreshTokenUrl
(
String
refreshToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
refresh
())
.
queryParam
(
"appid"
,
config
.
getClientId
())
.
queryParam
(
"refresh_token"
,
refreshToken
)
.
queryParam
(
"grant_type"
,
"refresh_token"
)
.
build
();
}
}
src/main/java/me/zhyd/oauth/request/AuthWeiboRequest.java
浏览文件 @
d5e60165
...
...
@@ -10,10 +10,9 @@ import me.zhyd.oauth.model.AuthCallback;
import
me.zhyd.oauth.model.AuthToken
;
import
me.zhyd.oauth.model.AuthUser
;
import
me.zhyd.oauth.model.AuthUserGender
;
import
me.zhyd.oauth.url.AuthWeiboUrlBuilder
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.IpUtils
;
import
me.zhyd.oauth.utils.StringUtils
;
import
me.zhyd.oauth.utils.UrlBuilder
;
/**
...
...
@@ -26,24 +25,24 @@ import me.zhyd.oauth.utils.StringUtils;
public
class
AuthWeiboRequest
extends
AuthDefaultRequest
{
public
AuthWeiboRequest
(
AuthConfig
config
)
{
super
(
config
,
AuthSource
.
WEIBO
,
new
AuthWeiboUrlBuilder
()
);
super
(
config
,
AuthSource
.
WEIBO
);
}
@Override
protected
AuthToken
getAccessToken
(
AuthCallback
authCallback
)
{
String
accessTokenUrl
=
this
.
urlBuilder
.
getAccessTokenUrl
(
authCallback
.
getCode
());
HttpResponse
response
=
HttpRequest
.
post
(
accessTokenUrl
).
execute
();
HttpResponse
response
=
doPostAuthorizationCode
(
authCallback
.
getCode
());
String
accessTokenStr
=
response
.
body
();
JSONObject
accessTokenObject
=
JSONObject
.
parseObject
(
accessTokenStr
);
if
(
accessTokenObject
.
containsKey
(
"error"
))
{
throw
new
AuthException
(
"Unable to get token from weibo using code ["
+
authCallback
.
getCode
()
+
"]:"
+
accessTokenObject
.
getString
(
"error_description"
));
throw
new
AuthException
(
"Unable to get token from weibo using code ["
+
authCallback
.
getCode
()
+
"]:"
+
accessTokenObject
.
getString
(
"error_description"
));
}
return
AuthToken
.
builder
()
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
uid
(
accessTokenObject
.
getString
(
"uid"
))
.
openId
(
accessTokenObject
.
getString
(
"uid"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
build
();
.
accessToken
(
accessTokenObject
.
getString
(
"access_token"
))
.
uid
(
accessTokenObject
.
getString
(
"uid"
))
.
openId
(
accessTokenObject
.
getString
(
"uid"
))
.
expireIn
(
accessTokenObject
.
getIntValue
(
"expires_in"
))
.
build
();
}
@Override
...
...
@@ -51,29 +50,41 @@ public class AuthWeiboRequest extends AuthDefaultRequest {
String
accessToken
=
authToken
.
getAccessToken
();
String
uid
=
authToken
.
getUid
();
String
oauthParam
=
String
.
format
(
"uid=%s&access_token=%s"
,
uid
,
accessToken
);
HttpResponse
response
=
HttpRequest
.
get
(
this
.
urlBuilder
.
getUserInfoUrl
(
AuthUserInfoEntity
.
builder
()
.
extra
(
oauthParam
)
.
build
()))
.
header
(
"Authorization"
,
"OAuth2 "
+
oauthParam
)
.
header
(
"API-RemoteIP"
,
IpUtils
.
getIp
())
.
execute
();
HttpResponse
response
=
HttpRequest
.
get
(
userInfoUrl
(
authToken
))
.
header
(
"Authorization"
,
"OAuth2 "
+
oauthParam
)
.
header
(
"API-RemoteIP"
,
IpUtils
.
getIp
())
.
execute
();
String
userInfo
=
response
.
body
();
JSONObject
object
=
JSONObject
.
parseObject
(
userInfo
);
if
(
object
.
containsKey
(
"error"
))
{
throw
new
AuthException
(
object
.
getString
(
"error"
));
}
return
AuthUser
.
builder
()
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
avatar
(
object
.
getString
(
"profile_image_url"
))
.
blog
(
StringUtils
.
isEmpty
(
object
.
getString
(
"url"
))
?
"https://weibo.com/"
+
object
.
getString
(
"profile_url"
)
:
object
.
getString
(
"url"
))
.
nickname
(
object
.
getString
(
"screen_name"
))
.
location
(
object
.
getString
(
"location"
))
.
remark
(
object
.
getString
(
"description"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"gender"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
WEIBO
)
.
build
();
.
uuid
(
object
.
getString
(
"id"
))
.
username
(
object
.
getString
(
"name"
))
.
avatar
(
object
.
getString
(
"profile_image_url"
))
.
blog
(
StringUtils
.
isEmpty
(
object
.
getString
(
"url"
))
?
"https://weibo.com/"
+
object
.
getString
(
"profile_url"
)
:
object
.
getString
(
"url"
))
.
nickname
(
object
.
getString
(
"screen_name"
))
.
location
(
object
.
getString
(
"location"
))
.
remark
(
object
.
getString
(
"description"
))
.
gender
(
AuthUserGender
.
getRealGender
(
object
.
getString
(
"gender"
)))
.
token
(
authToken
)
.
source
(
AuthSource
.
WEIBO
)
.
build
();
}
/**
* 返回获取userInfo的url
*
* @param authToken
* @return 返回获取userInfo的url
*/
@Override
protected
String
userInfoUrl
(
AuthToken
authToken
)
{
return
UrlBuilder
.
fromBaseUrl
(
source
.
userInfo
())
.
queryParam
(
"access_token"
,
authToken
.
getAccessToken
())
.
queryParam
(
"uid"
,
authToken
.
getUid
())
.
build
();
}
}
src/main/java/me/zhyd/oauth/url/AuthAlipayUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* Baidu相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthAlipayUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
ALIPAY_AUTHORIZE_PATTERN
=
"{0}?app_id={1}&scope=auth_user&redirect_uri={2}&state={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
ALIPAY_AUTHORIZE_PATTERN
,
AuthSource
.
ALIPAY
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthBaiduUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* Baidu相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthBaiduUrlBuilder
extends
AuthDefaultUrlBuilder
{
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}"
;
private
static
final
String
BAIDU_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&display=popup&state={3}"
;
private
static
final
String
BAIDU_REVOKE_PATTERN
=
"{0}?access_token={1}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
BAIDU_ACCESS_TOKEN_PATTERN
,
AuthSource
.
BAIDU
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
BAIDU_USER_INFO_PATTERN
,
AuthSource
.
BAIDU
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
BAIDU_AUTHORIZE_PATTERN
,
AuthSource
.
BAIDU
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
return
MessageFormat
.
format
(
BAIDU_REVOKE_PATTERN
,
AuthSource
.
BAIDU
.
revoke
(),
accessToken
);
}
}
src/main/java/me/zhyd/oauth/url/AuthCodingUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* Coding相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthCodingUrlBuilder
extends
AuthDefaultUrlBuilder
{
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}"
;
private
static
final
String
CODING_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
CODING_ACCESS_TOKEN_PATTERN
,
AuthSource
.
CODING
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
CODING_USER_INFO_PATTERN
,
AuthSource
.
CODING
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
CODING_AUTHORIZE_PATTERN
,
AuthSource
.
CODING
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthCsdnUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* csdn相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
@Deprecated
public
class
AuthCsdnUrlBuilder
extends
AuthDefaultUrlBuilder
{
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}"
;
private
static
final
String
CSDN_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
CSDN_ACCESS_TOKEN_PATTERN
,
AuthSource
.
CSDN
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
CSDN_USER_INFO_PATTERN
,
AuthSource
.
CSDN
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
CSDN_AUTHORIZE_PATTERN
,
AuthSource
.
CSDN
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthDefaultUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthConfig
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
me.zhyd.oauth.utils.StringUtils
;
/**
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
abstract
class
AuthDefaultUrlBuilder
{
protected
AuthConfig
config
;
/**
* 获取AccessToken的URL
*
* @param code 第三方平台返回的code
* @return AccessTokenUrl
*/
public
abstract
String
getAccessTokenUrl
(
String
code
);
/**
* 获取用户信息的URL
*
* @param userInfoEntity 传递生成 UserInfoUrl 必须的参数
* @return UserInfoUrl
*/
public
abstract
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
);
/**
* 获取跳转授权页面的URL
*
* @return AuthorizeUrl
*/
public
abstract
String
getAuthorizeUrl
();
/**
* 获取刷新token的URL
*
* @param refreshToken 授权后取得的refresh token
* @return RefreshUrl
*/
public
abstract
String
getRefreshUrl
(
String
refreshToken
);
/**
* 获取取消授权的URL
*
* @param accessToken 授权后的token
* @return RevokeUrl
*/
public
abstract
String
getRevokeUrl
(
String
accessToken
);
/**
* 获取openId的地址,目前只有qq平台需要,故不需要子类强制重写
*
* @param accessToken 用户授权后返回的accesstoken
* @param unionid 是否需要申请unionid,目前只针对qq登录
* 注:qq授权登录时,获取unionid需要单独发送邮件申请权限。如果个人开发者账号中申请了该权限,可以将该值置为true,在获取openId时就会同步获取unionId
* 参考链接:http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D
* @return openIdUrl
*/
public
String
getOpenIdUrl
(
String
accessToken
,
boolean
unionid
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
/**
* 获取state,如果为空, 则默认去当前日期的时间戳
*
* @param state 原始的state
* @return 返回不为null的state
*/
protected
String
getRealState
(
String
state
)
{
return
StringUtils
.
isEmpty
(
state
)
?
String
.
valueOf
(
System
.
currentTimeMillis
())
:
state
;
}
public
void
setAuthConfig
(
AuthConfig
config
)
{
this
.
config
=
config
;
}
}
src/main/java/me/zhyd/oauth/url/AuthDingtalkUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* 钉钉相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthDingtalkUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
DING_TALK_QRCONNECT_PATTERN
=
"{0}?appid={1}&response_type=code&scope=snsapi_login&redirect_uri={2}&state={3}"
;
private
static
final
String
DING_TALK_USER_INFO_PATTERN
=
"{0}?signature={1}×tamp={2}&accessKey={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
DING_TALK_USER_INFO_PATTERN
,
AuthSource
.
DINGTALK
.
userInfo
(),
userInfoEntity
.
getSignature
(),
userInfoEntity
.
getTimestamp
(),
userInfoEntity
.
getClientId
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
DING_TALK_QRCONNECT_PATTERN
,
AuthSource
.
DINGTALK
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthDouyinUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* 抖音相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthDouyinUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
DOUYIN_AUTHORIZE_PATTERN
=
"{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&scope=user_info"
;
private
static
final
String
DOUYIN_ACCESS_TOKEN_PATTERN
=
"{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorization_code"
;
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"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
DOUYIN_ACCESS_TOKEN_PATTERN
,
AuthSource
.
DOUYIN
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
DOUYIN_USER_INFO_PATTERN
,
AuthSource
.
DOUYIN
.
userInfo
(),
userInfoEntity
.
getAccessToken
(),
userInfoEntity
.
getOpenId
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
DOUYIN_AUTHORIZE_PATTERN
,
AuthSource
.
DOUYIN
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
return
MessageFormat
.
format
(
DOUYIN_REFRESH_TOKEN_PATTERN
,
AuthSource
.
DOUYIN
.
refresh
(),
config
.
getClientId
(),
refreshToken
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthFacebookUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* Facebook相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthFacebookUrlBuilder
extends
AuthDefaultUrlBuilder
{
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)"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
FACEBOOK_ACCESS_TOKEN_PATTERN
,
AuthSource
.
FACEBOOK
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
FACEBOOK_USER_INFO_PATTERN
,
AuthSource
.
FACEBOOK
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
FACEBOOK_AUTHORIZE_PATTERN
,
AuthSource
.
FACEBOOK
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthGiteeUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.*
;
import
java.text.MessageFormat
;
/**
* Gitee相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthGiteeUrlBuilder
extends
AuthDefaultUrlBuilder
{
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}"
;
private
static
final
String
GITEE_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
GITEE_ACCESS_TOKEN_PATTERN
,
AuthSource
.
GITEE
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
GITEE_USER_INFO_PATTERN
,
AuthSource
.
GITEE
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
GITEE_AUTHORIZE_PATTERN
,
AuthSource
.
GITEE
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthGithubUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* Github相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthGithubUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
GITHUB_ACCESS_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}"
;
private
static
final
String
GITHUB_USER_INFO_PATTERN
=
"{0}?access_token={1}"
;
private
static
final
String
GITHUB_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&redirect_uri={2}&state={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
GITHUB_ACCESS_TOKEN_PATTERN
,
AuthSource
.
GITHUB
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
GITHUB_USER_INFO_PATTERN
,
AuthSource
.
GITHUB
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
GITHUB_AUTHORIZE_PATTERN
,
AuthSource
.
GITHUB
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthGoogleUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* Google相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthGoogleUrlBuilder
extends
AuthDefaultUrlBuilder
{
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}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
GOOGLE_ACCESS_TOKEN_PATTERN
,
AuthSource
.
GOOGLE
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
GOOGLE_USER_INFO_PATTERN
,
AuthSource
.
GOOGLE
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
GOOGLE_AUTHORIZE_PATTERN
,
AuthSource
.
GOOGLE
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthLinkedinUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* Microsoft相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthLinkedinUrlBuilder
extends
AuthDefaultUrlBuilder
{
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"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
LINKEDIN_ACCESS_TOKEN_PATTERN
,
AuthSource
.
LINKEDIN
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
LINKEDIN_USER_INFO_PATTERN
,
AuthSource
.
LINKEDIN
.
userInfo
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
LINKEDIN_AUTHORIZE_PATTERN
,
AuthSource
.
LINKEDIN
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
return
MessageFormat
.
format
(
LINKEDIN_REFRESH_TOKEN_PATTERN
,
AuthSource
.
LINKEDIN
.
refresh
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
refreshToken
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthMiUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* 小米相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthMiUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
MI_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&redirect_uri={2}&response_type=code&scope=user/profile%20user/openIdV2%20user/phoneAndEmail&state={3}&skip_confirm=false"
;
private
static
final
String
MI_ACCESS_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&redirect_uri={3}&code={4}&grant_type=authorization_code"
;
private
static
final
String
MI_USER_INFO_PATTERN
=
"{0}?clientId={1}&token={2}"
;
private
static
final
String
MI_REFRESH_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&redirect_uri={3}&refresh_token={4}&grant_type=refresh_token"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
MI_ACCESS_TOKEN_PATTERN
,
AuthSource
.
MI
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
config
.
getRedirectUri
(),
code
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
MI_USER_INFO_PATTERN
,
AuthSource
.
MI
.
userInfo
(),
userInfoEntity
.
getClientId
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
MI_AUTHORIZE_PATTERN
,
AuthSource
.
MI
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
return
MessageFormat
.
format
(
MI_REFRESH_TOKEN_PATTERN
,
AuthSource
.
MI
.
refresh
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
config
.
getRedirectUri
(),
refreshToken
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthMicrosoftUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* Microsoft相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthMicrosoftUrlBuilder
extends
AuthDefaultUrlBuilder
{
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"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
MICROSOFT_ACCESS_TOKEN_PATTERN
,
AuthSource
.
MICROSOFT
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
config
.
getRedirectUri
(),
code
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
MICROSOFT_USER_INFO_PATTERN
,
AuthSource
.
MICROSOFT
.
userInfo
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
MICROSOFT_AUTHORIZE_PATTERN
,
AuthSource
.
MICROSOFT
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
return
MessageFormat
.
format
(
MICROSOFT_REFRESH_TOKEN_PATTERN
,
AuthSource
.
MICROSOFT
.
refresh
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
config
.
getRedirectUri
(),
refreshToken
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthOschinaUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* OSChina相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthOschinaUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
OSCHINA_ACCESS_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}&dataType=json"
;
private
static
final
String
OSCHINA_USER_INFO_PATTERN
=
"{0}?access_token={1}&dataType=json"
;
private
static
final
String
OSCHINA_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
OSCHINA_ACCESS_TOKEN_PATTERN
,
AuthSource
.
OSCHINA
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
OSCHINA_USER_INFO_PATTERN
,
AuthSource
.
OSCHINA
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
OSCHINA_AUTHORIZE_PATTERN
,
AuthSource
.
OSCHINA
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthQqUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* QQ相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthQqUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
QQ_ACCESS_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"
;
private
static
final
String
QQ_USER_INFO_PATTERN
=
"{0}?oauth_consumer_key={1}&access_token={2}&openid={3}"
;
private
static
final
String
QQ_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"
;
private
static
final
String
QQ_OPENID_PATTERN
=
"{0}?access_token={1}&unionid={2}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
QQ_ACCESS_TOKEN_PATTERN
,
AuthSource
.
QQ
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
QQ_USER_INFO_PATTERN
,
AuthSource
.
QQ
.
userInfo
(),
userInfoEntity
.
getClientId
(),
userInfoEntity
.
getAccessToken
(),
userInfoEntity
.
getOpenId
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
QQ_AUTHORIZE_PATTERN
,
AuthSource
.
QQ
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getOpenIdUrl
(
String
accessToken
,
boolean
unionid
)
{
return
MessageFormat
.
format
(
QQ_OPENID_PATTERN
,
"https://graph.qq.com/oauth2.0/me"
,
accessToken
,
unionid
?
1
:
0
);
}
}
src/main/java/me/zhyd/oauth/url/AuthRenrenUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
import
static
me
.
zhyd
.
oauth
.
config
.
AuthSource
.
RENREN
;
/**
* 人人网相关的URL构建类
*
* @author hongwei.peng (pengisgood(at)gmail(dot)com)
* @version 1.8.1
* @since 1.8.1
*/
public
class
AuthRenrenUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
RENREN_ACCESS_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"
;
private
static
final
String
RENREN_USER_INFO_PATTERN
=
"{0}?access_token={1}&userId={2}"
;
private
static
final
String
RENREN_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"
;
private
static
final
String
RENREN_REFRESH_PATTERN
=
"{0}?refresh_token={1}&client_id={2}&client_secret={3}&grant_type=refresh_token"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
RENREN_ACCESS_TOKEN_PATTERN
,
RENREN
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
RENREN_USER_INFO_PATTERN
,
RENREN
.
userInfo
(),
userInfoEntity
.
getAccessToken
(),
userInfoEntity
.
getOpenId
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
RENREN_AUTHORIZE_PATTERN
,
RENREN
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
return
MessageFormat
.
format
(
RENREN_REFRESH_PATTERN
,
RENREN
.
refresh
(),
refreshToken
,
config
.
getClientId
(),
config
.
getClientSecret
());
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
UNSUPPORTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthTaobaoUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* 淘宝相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthTaobaoUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
TAOBAO_AUTHORIZE_PATTERN
=
"{0}?response_type=code&client_id={1}&redirect_uri={2}&state={3}&view=web"
;
private
static
final
String
TAOBAO_ACCESS_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&code={3}&redirect_uri={4}&grant_type=authorization_code"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
TAOBAO_ACCESS_TOKEN_PATTERN
,
AuthSource
.
TAOBAO
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
TAOBAO_AUTHORIZE_PATTERN
,
AuthSource
.
TAOBAO
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthTeambitionUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @website https://www.zhyd.me
* @date 2019/7/16 22:22
* @since 1.8
*/
public
class
AuthTeambitionUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
TEAMBITION_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&redirect_uri={2}&state={3}&response_type=code"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
AuthSource
.
TEAMBITION
.
accessToken
();
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
AuthSource
.
TEAMBITION
.
userInfo
();
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
TEAMBITION_AUTHORIZE_PATTERN
,
AuthSource
.
TEAMBITION
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
return
AuthSource
.
TEAMBITION
.
refresh
();
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
return
null
;
}
}
src/main/java/me/zhyd/oauth/url/AuthTencentCloudUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* 今日头条相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthTencentCloudUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
TENCENT_ACCESS_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}"
;
private
static
final
String
TENCENT_USER_INFO_PATTERN
=
"{0}?access_token={1}"
;
private
static
final
String
TENCENT_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&scope=user&state={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
TENCENT_ACCESS_TOKEN_PATTERN
,
AuthSource
.
TENCENT_CLOUD
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
TENCENT_USER_INFO_PATTERN
,
AuthSource
.
TENCENT_CLOUD
.
userInfo
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
TENCENT_AUTHORIZE_PATTERN
,
AuthSource
.
TENCENT_CLOUD
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthToutiaoUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* 今日头条相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthToutiaoUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
TOUTIAO_ACCESS_TOKEN_PATTERN
=
"{0}?client_key={1}&client_secret={2}&code={3}&grant_type=authorize_code"
;
private
static
final
String
TOUTIAO_USER_INFO_PATTERN
=
"{0}?client_key={1}&access_token={2}"
;
private
static
final
String
TOUTIAO_AUTHORIZE_PATTERN
=
"{0}?client_key={1}&redirect_uri={2}&state={3}&response_type=code&auth_only=1&display=0"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
TOUTIAO_ACCESS_TOKEN_PATTERN
,
AuthSource
.
TOUTIAO
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
TOUTIAO_USER_INFO_PATTERN
,
AuthSource
.
TOUTIAO
.
userInfo
(),
userInfoEntity
.
getClientId
(),
userInfoEntity
.
getAccessToken
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
TOUTIAO_AUTHORIZE_PATTERN
,
AuthSource
.
TOUTIAO
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthWechatUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* 微信相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthWechatUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
WECHAT_AUTHORIZE_PATTERN
=
"{0}?appid={1}&redirect_uri={2}&response_type=code&scope=snsapi_login&state={3}#wechat_redirect"
;
private
static
final
String
WECHAT_ACCESS_TOKEN_PATTERN
=
"{0}?appid={1}&secret={2}&code={3}&grant_type=authorization_code"
;
private
static
final
String
WECHAT_REFRESH_TOKEN_PATTERN
=
"{0}?appid={1}&grant_type=refresh_token&refresh_token={2}"
;
private
static
final
String
WECHAT_USER_INFO_PATTERN
=
"{0}?access_token={1}&openid={2}&lang=zh_CN"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
WECHAT_ACCESS_TOKEN_PATTERN
,
AuthSource
.
WECHAT
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
);
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
WECHAT_USER_INFO_PATTERN
,
AuthSource
.
WECHAT
.
userInfo
(),
userInfoEntity
.
getAccessToken
(),
userInfoEntity
.
getOpenId
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
WECHAT_AUTHORIZE_PATTERN
,
AuthSource
.
WECHAT
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
return
MessageFormat
.
format
(
WECHAT_REFRESH_TOKEN_PATTERN
,
AuthSource
.
WECHAT
.
refresh
(),
config
.
getClientId
(),
refreshToken
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/AuthWeiboUrlBuilder.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
import
me.zhyd.oauth.url.entity.AuthUserInfoEntity
;
import
java.text.MessageFormat
;
/**
* 微博相关的URL构建类
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
public
class
AuthWeiboUrlBuilder
extends
AuthDefaultUrlBuilder
{
private
static
final
String
WEIBO_ACCESS_TOKEN_PATTERN
=
"{0}?client_id={1}&client_secret={2}&grant_type=authorization_code&code={3}&redirect_uri={4}"
;
private
static
final
String
WEIBO_USER_INFO_PATTERN
=
"{0}?{1}"
;
private
static
final
String
WEIBO_AUTHORIZE_PATTERN
=
"{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}"
;
@Override
public
String
getAccessTokenUrl
(
String
code
)
{
return
MessageFormat
.
format
(
WEIBO_ACCESS_TOKEN_PATTERN
,
AuthSource
.
WEIBO
.
accessToken
(),
config
.
getClientId
(),
config
.
getClientSecret
(),
code
,
config
.
getRedirectUri
());
}
@Override
public
String
getUserInfoUrl
(
AuthUserInfoEntity
userInfoEntity
)
{
return
MessageFormat
.
format
(
WEIBO_USER_INFO_PATTERN
,
AuthSource
.
WEIBO
.
userInfo
(),
userInfoEntity
.
getExtra
());
}
@Override
public
String
getAuthorizeUrl
()
{
return
MessageFormat
.
format
(
WEIBO_AUTHORIZE_PATTERN
,
AuthSource
.
WEIBO
.
authorize
(),
config
.
getClientId
(),
config
.
getRedirectUri
(),
this
.
getRealState
(
config
.
getState
()));
}
@Override
public
String
getRefreshUrl
(
String
refreshToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
@Override
public
String
getRevokeUrl
(
String
accessToken
)
{
throw
new
AuthException
(
AuthResponseStatus
.
NOT_IMPLEMENTED
);
}
}
src/main/java/me/zhyd/oauth/url/entity/AuthUserInfoEntity.java
已删除
100644 → 0
浏览文件 @
32c540cf
package
me.zhyd.oauth.url.entity
;
import
lombok.Builder
;
import
lombok.Getter
;
/**
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 1.0
* @since 1.8
*/
@Getter
@Builder
public
class
AuthUserInfoEntity
{
/**
* 授权返回的token
*/
private
String
accessToken
;
/**
* 用户openId
*/
private
String
openId
;
/**
* client key
*/
private
String
clientId
;
/**
* 额外的属性
*/
private
String
extra
;
/**
* 额外的属性
*/
private
String
signature
;
/**
* 额外的属性
*/
private
String
timestamp
;
}
src/main/java/me/zhyd/oauth/utils/AuthState.java
浏览文件 @
d5e60165
...
...
@@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64;
import
cn.hutool.core.util.RandomUtil
;
import
com.alibaba.fastjson.JSON
;
import
lombok.extern.slf4j.Slf4j
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.exception.AuthException
;
import
me.zhyd.oauth.model.AuthResponseStatus
;
...
...
@@ -30,6 +31,16 @@ public class AuthState {
*/
private
static
ConcurrentHashMap
<
String
,
String
>
stateBucket
=
new
ConcurrentHashMap
<>();
/**
* 生成随机的state
*
* @param source oauth平台
* @return state
*/
public
static
String
create
(
AuthSource
source
)
{
return
create
(
source
.
name
());
}
/**
* 生成随机的state
*
...
...
@@ -158,6 +169,15 @@ public class AuthState {
stateBucket
.
remove
(
key
);
}
/**
* 登录成功后,清除state
*
* @param source oauth平台
*/
public
static
void
delete
(
AuthSource
source
)
{
delete
(
source
.
name
());
}
private
static
String
getCurrentIp
()
{
String
currentIp
=
IpUtils
.
getIp
();
return
StringUtils
.
isEmpty
(
currentIp
)
?
EMPTY_STR
:
currentIp
;
...
...
src/main/java/me/zhyd/oauth/utils/GlobalAuthUtil.java
浏览文件 @
d5e60165
package
me.zhyd.oauth.utils
;
import
cn.hutool.core.codec.Base64
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.http.HttpUtil
;
import
me.zhyd.oauth.exception.AuthException
;
...
...
@@ -13,9 +15,7 @@ import java.nio.charset.Charset;
import
java.nio.charset.StandardCharsets
;
import
java.security.InvalidKeyException
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.*
;
/**
* 全局的工具类
...
...
@@ -83,6 +83,20 @@ public class GlobalAuthUtil {
return
res
;
}
public
static
String
parseMapToString
(
Map
<
String
,
Object
>
params
,
boolean
encode
)
{
List
<
String
>
paramList
=
new
ArrayList
<>();
params
.
forEach
((
k
,
v
)
->
{
if
(
ObjectUtil
.
isNull
(
v
))
{
paramList
.
add
(
k
+
"="
);
}
else
{
String
valueString
=
v
.
toString
();
paramList
.
add
(
k
+
"="
+
(
encode
?
urlEncode
(
valueString
)
:
valueString
));
}
});
return
CollUtil
.
join
(
paramList
,
"&"
);
}
public
static
Map
<
String
,
Object
>
parseQueryToMap
(
String
url
)
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
HttpUtil
.
decodeParamMap
(
url
,
"UTF-8"
).
forEach
(
paramMap:
:
put
);
...
...
src/main/java/me/zhyd/oauth/utils/UrlBuilder.java
0 → 100644
浏览文件 @
d5e60165
package
me.zhyd.oauth.utils
;
import
cn.hutool.core.lang.Assert
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.util.StrUtil
;
import
lombok.Data
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
/**
* <p>
* 构造URL
* </p>
*
* @author yangkai.shen (https://xkcoding.com)
* @date Created in 2019-07-18 15:47
*/
@Data
public
class
UrlBuilder
{
private
String
baseUrl
;
private
final
Map
<
String
,
Object
>
params
=
new
LinkedHashMap
<>(
4
);
/**
* @param baseUrl 基础路径
* @return the new {@code UrlBuilder}
*/
public
static
UrlBuilder
fromBaseUrl
(
String
baseUrl
)
{
UrlBuilder
builder
=
new
UrlBuilder
();
builder
.
setBaseUrl
(
baseUrl
);
return
builder
;
}
/**
* 添加参数
*
* @param key 参数名称
* @param value 参数值
* @return this UrlBuilder
*/
public
UrlBuilder
queryParam
(
String
key
,
Object
value
)
{
Assert
.
notBlank
(
key
,
"参数名不能为空"
);
String
valueAsString
=
(
value
!=
null
?
value
.
toString
()
:
null
);
this
.
params
.
put
(
key
,
valueAsString
);
return
this
;
}
/**
* 构造url
*
* @return url
*/
public
String
build
()
{
return
this
.
build
(
false
);
}
/**
* 构造url
*
* @param encode 转码
* @return url
*/
public
String
build
(
boolean
encode
)
{
if
(
MapUtil
.
isEmpty
(
this
.
params
))
{
return
this
.
baseUrl
;
}
String
baseUrl
=
StrUtil
.
addSuffixIfNot
(
this
.
baseUrl
,
"?"
);
String
paramString
=
GlobalAuthUtil
.
parseMapToString
(
this
.
params
,
encode
);
return
baseUrl
+
paramString
;
}
}
src/test/java/me/zhyd/oauth/utils/UrlBuilderTest.java
0 → 100644
浏览文件 @
d5e60165
package
me.zhyd.oauth.utils
;
import
me.zhyd.oauth.config.AuthConfig
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.request.AuthWeChatRequest
;
import
org.junit.Assert
;
import
org.junit.Test
;
/**
* <p>
* UrlBuilder测试类
* </p>
*
* @author yangkai.shen (https://xkcoding.com)
* @date Created in 2019-07-18 16:36
*/
public
class
UrlBuilderTest
{
@Test
public
void
testUrlBuilder
()
{
AuthConfig
config
=
new
AuthConfig
();
config
.
setClientId
(
"appid-110110110"
);
config
.
setClientSecret
(
"secret-110110110"
);
config
.
setRedirectUri
(
"https://xkcoding.com"
);
config
.
setState
(
AuthState
.
create
(
AuthSource
.
WECHAT
));
String
build
=
UrlBuilder
.
fromBaseUrl
(
AuthSource
.
WECHAT
.
authorize
())
.
queryParam
(
"appid"
,
config
.
getClientId
())
.
queryParam
(
"redirect_uri"
,
config
.
getRedirectUri
())
.
queryParam
(
"response_type"
,
"code"
)
.
queryParam
(
"scope"
,
"snsapi_login"
)
.
queryParam
(
"state"
,
config
.
getState
().
concat
(
"#wechat_redirect"
))
.
build
(
false
);
AuthWeChatRequest
request
=
new
AuthWeChatRequest
(
config
);
String
authorize
=
request
.
authorize
();
Assert
.
assertEquals
(
build
,
authorize
);
AuthState
.
delete
(
AuthSource
.
WECHAT
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录