Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3cf8beab83 | ||
|
|
3824bc0887 | ||
|
|
b8c3caea73 |
37
README.md
37
README.md
@@ -20,18 +20,19 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center" width="200"><a href="https://gitee.com/"><img src="https://gitee.com/logo_icon.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://gitee.com/"><img src="https://gitee.com/logo_icon.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://github.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/github.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://github.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/github.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://weibo.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/weibo.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://weibo.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/weibo.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://www.dingtalk.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/dingding.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://www.dingtalk.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/dingding.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://developer.baidu.com/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/baidu.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://developer.baidu.com/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/baidu.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://www.csdn.net/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/csdn.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://www.csdn.net/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/csdn.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://coding.net"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/coding.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://coding.net"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/coding.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://dev.tencent.com/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/tencent_cloud.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://dev.tencent.com/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/tencent_cloud.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://www.oschina.net"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/oschinas.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://www.oschina.net"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/oschinas.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://www.alipay.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/alipay.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://www.alipay.com"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/alipay.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://connect.qq.com/devuser.html#/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/qq.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://connect.qq.com/devuser.html#/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/qq.png" width="20"></a></td>
|
||||||
<td align="center" width="200"><a href="https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/wechats.png" width="30"></a></td>
|
<td align="center" width="200"><a href="https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/wechats.png" width="20"></a></td>
|
||||||
|
<td align="center" width="200"><a href="https://open.taobao.com/"><img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/taobao.png" width="20"></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -48,6 +49,7 @@
|
|||||||
<td align="center" width="200"><a href="#授权支付宝">支付宝</a></td>
|
<td align="center" width="200"><a href="#授权支付宝">支付宝</a></td>
|
||||||
<td align="center" width="200"><a href="#授权qq">QQ</a></td>
|
<td align="center" width="200"><a href="#授权qq">QQ</a></td>
|
||||||
<td align="center" width="200"><a href="#授权微信">微信</a></td>
|
<td align="center" width="200"><a href="#授权微信">微信</a></td>
|
||||||
|
<td align="center" width="200"><a href="#授权淘宝">淘宝</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -67,7 +69,7 @@ JustAuth,如你所见,它仅仅是一个**第三方授权登录**的**工具
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>me.zhyd.oauth</groupId>
|
<groupId>me.zhyd.oauth</groupId>
|
||||||
<artifactId>JustAuth</artifactId>
|
<artifactId>JustAuth</artifactId>
|
||||||
<version>1.1.0</version>
|
<version>1.2.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
- 调用api
|
- 调用api
|
||||||
@@ -94,7 +96,7 @@ authRequest.login("code");
|
|||||||
|:------:|:-------:|:-------:|
|
|:------:|:-------:|:-------:|
|
||||||
| <img src="https://gitee.com/logo_icon.png" width="20"> | [AuthGiteeRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java) | <a href="https://gitee.com/api/v5/oauth_doc#list_1" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/logo_icon.png" width="20"> | [AuthGiteeRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java) | <a href="https://gitee.com/api/v5/oauth_doc#list_1" target="_blank">参考文档</a> |
|
||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/github.png" width="20"> | [AuthGithubRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java) | <a href="https://github.com/settings/developers" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/github.png" width="20"> | [AuthGithubRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java) | <a href="https://github.com/settings/developers" target="_blank">参考文档</a> |
|
||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/weibo.png" width="20"> | [AuthWeiboRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java) | <a href="https://open.weibo.com/apps?_blank" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/weibo.png" width="20"> | [AuthWeiboRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGiteeRequest.java) | <a href="https://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI" target="_blank">参考文档</a> |
|
||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/dingding.png" width="20"> | [AuthDingTalkRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java) | <a href="https://open-doc.dingtalk.com/microapp/serverapi2/kymkv6" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/dingding.png" width="20"> | [AuthDingTalkRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthDingTalkRequest.java) | <a href="https://open-doc.dingtalk.com/microapp/serverapi2/kymkv6" target="_blank">参考文档</a> |
|
||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/baidu.png" width="20"> | [AuthBaiduRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java) | <a href="https://developer.baidu.com/" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/baidu.png" width="20"> | [AuthBaiduRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthBaiduRequest.java) | <a href="https://developer.baidu.com/" target="_blank">参考文档</a> |
|
||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/coding.png" width="25"> | [AuthCodingRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java) | <a href="https://open.coding.net/references/oauth/" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/coding.png" width="25"> | [AuthCodingRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCodingRequest.java) | <a href="https://open.coding.net/references/oauth/" target="_blank">参考文档</a> |
|
||||||
@@ -103,7 +105,8 @@ authRequest.login("code");
|
|||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/alipay.png" width="20"> | [AuthAlipayRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java) | <a href="https://alipay.open.taobao.com/docs/doc.htm?spm=a219a.7629140.0.0.336d4b70GUKXOl&treeId=193&articleId=105809&docType=1" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/alipay.png" width="20"> | [AuthAlipayRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java) | <a href="https://alipay.open.taobao.com/docs/doc.htm?spm=a219a.7629140.0.0.336d4b70GUKXOl&treeId=193&articleId=105809&docType=1" target="_blank">参考文档</a> |
|
||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/qq.png" width="20"> | [AuthQqRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java) | <a href="http://wiki.connect.qq.com/" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/qq.png" width="20"> | [AuthQqRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthQqRequest.java) | <a href="http://wiki.connect.qq.com/" target="_blank">参考文档</a> |
|
||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/csdn.png" width="20"> | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 待续 |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/csdn.png" width="20"> | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 待续 |
|
||||||
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/wechats.png" width="20"> | [AuthWeChatRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | <a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN" target="_blank">参考文档</a> |
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/wechats.png" width="20"> | [AuthWeChatRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthWeChatRequest.java) | <a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN" target="_blank">参考文档</a> |
|
||||||
|
| <img src="https://gitee.com/yadong.zhang/static/raw/master/JustAuth/taobao.png" width="20"> | [AuthTaobaoRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java) | <a href="https://open.taobao.com/doc.htm?spm=a219a.7386797.0.0.4e00669acnkQy6&source=search&docId=105590&docType=1" target="_blank">参考文档</a> |
|
||||||
|
|
||||||
## 后续开发计划
|
## 后续开发计划
|
||||||
|
|
||||||
@@ -168,6 +171,10 @@ authRequest.login("code");
|
|||||||
|
|
||||||
待续
|
待续
|
||||||
|
|
||||||
|
#### 授权淘宝
|
||||||
|
|
||||||
|
待续
|
||||||
|
|
||||||
# 交流
|
# 交流
|
||||||
|
|
||||||
| 微信(备注:加群) | 公众号 |
|
| 微信(备注:加群) | 公众号 |
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>me.zhyd.oauth</groupId>
|
<groupId>me.zhyd.oauth</groupId>
|
||||||
<artifactId>JustAuth</artifactId>
|
<artifactId>JustAuth</artifactId>
|
||||||
<version>1.1.0</version>
|
<version>1.2.0</version>
|
||||||
|
|
||||||
<name>JustAuth</name>
|
<name>JustAuth</name>
|
||||||
<url>https://gitee.com/yadong.zhang/JustAuth</url>
|
<url>https://gitee.com/yadong.zhang/JustAuth</url>
|
||||||
|
|||||||
@@ -358,6 +358,35 @@ public enum ApiUrl {
|
|||||||
public String refresh() {
|
public String refresh() {
|
||||||
return "https://api.weixin.qq.com/sns/oauth2/refresh_token";
|
return "https://api.weixin.qq.com/sns/oauth2/refresh_token";
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 淘宝
|
||||||
|
*/
|
||||||
|
TAOBAO {
|
||||||
|
@Override
|
||||||
|
public String authorize() {
|
||||||
|
return "https://oauth.taobao.com/authorize";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String accessToken() {
|
||||||
|
return "https://oauth.taobao.com/token";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String userInfo() {
|
||||||
|
throw new AuthException(ResponseStatus.UNSUPPORTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String revoke() {
|
||||||
|
throw new AuthException(ResponseStatus.UNSUPPORTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String refresh() {
|
||||||
|
throw new AuthException(ResponseStatus.UNSUPPORTED);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public enum AuthSource {
|
|||||||
OSCHINA,
|
OSCHINA,
|
||||||
TENCEN_CLOUD,
|
TENCEN_CLOUD,
|
||||||
ALIPAY,
|
ALIPAY,
|
||||||
|
TAOBAO,
|
||||||
QQ,
|
QQ,
|
||||||
WECHAT,
|
WECHAT,
|
||||||
GOOGLE,
|
GOOGLE,
|
||||||
|
|||||||
@@ -12,12 +12,9 @@ import lombok.Data;
|
|||||||
@Builder
|
@Builder
|
||||||
public class AuthToken {
|
public class AuthToken {
|
||||||
private String accessToken;
|
private String accessToken;
|
||||||
private String expireIn;
|
private int expireIn;
|
||||||
private String refreshToken;
|
private String refreshToken;
|
||||||
private String uid;
|
private String uid;
|
||||||
private String openId;
|
private String openId;
|
||||||
/**
|
|
||||||
* 针对钉钉
|
|
||||||
*/
|
|
||||||
private String accessCode;
|
private String accessCode;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,5 +21,5 @@ public class AuthUser {
|
|||||||
private String remark;
|
private String remark;
|
||||||
private AuthUserGender gender;
|
private AuthUserGender gender;
|
||||||
private AuthSource source;
|
private AuthSource source;
|
||||||
private String accessToken;
|
private AuthToken token;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class AuthAlipayRequest extends BaseAuthRequest {
|
|||||||
.avatar(response.getAvatar())
|
.avatar(response.getAvatar())
|
||||||
.location(String.format("%s %s", StringUtils.isEmpty(province) ? "" : province, StringUtils.isEmpty(city) ? "" : city))
|
.location(String.format("%s %s", StringUtils.isEmpty(province) ? "" : province, StringUtils.isEmpty(city) ? "" : city))
|
||||||
.gender(AuthUserGender.getRealGender(response.getGender()))
|
.gender(AuthUserGender.getRealGender(response.getGender()))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.ALIPAY)
|
.source(AuthSource.ALIPAY)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package me.zhyd.oauth.request;
|
|||||||
import cn.hutool.http.HttpRequest;
|
import cn.hutool.http.HttpRequest;
|
||||||
import cn.hutool.http.HttpResponse;
|
import cn.hutool.http.HttpResponse;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import me.zhyd.oauth.config.AuthConfig;
|
import me.zhyd.oauth.config.AuthConfig;
|
||||||
import me.zhyd.oauth.exception.AuthException;
|
import me.zhyd.oauth.exception.AuthException;
|
||||||
import me.zhyd.oauth.model.*;
|
import me.zhyd.oauth.model.*;
|
||||||
@@ -49,7 +50,7 @@ public class AuthBaiduRequest extends BaseAuthRequest {
|
|||||||
.username(object.getString("username"))
|
.username(object.getString("username"))
|
||||||
.nickname(object.getString("username"))
|
.nickname(object.getString("username"))
|
||||||
.gender(AuthUserGender.getRealGender(object.getString("sex")))
|
.gender(AuthUserGender.getRealGender(object.getString("sex")))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.BAIDU)
|
.source(AuthSource.BAIDU)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
@@ -60,6 +61,12 @@ public class AuthBaiduRequest extends BaseAuthRequest {
|
|||||||
HttpResponse response = HttpRequest.get(UrlBuilder.getBaiduRevokeUrl(accessToken)).execute();
|
HttpResponse response = HttpRequest.get(UrlBuilder.getBaiduRevokeUrl(accessToken)).execute();
|
||||||
String userInfo = response.body();
|
String userInfo = response.body();
|
||||||
JSONObject object = JSONObject.parseObject(userInfo);
|
JSONObject object = JSONObject.parseObject(userInfo);
|
||||||
|
if(object.containsKey("error_code")) {
|
||||||
|
return AuthResponse.builder()
|
||||||
|
.code(ResponseStatus.FAILURE.getCode())
|
||||||
|
.msg(object.getString("error_msg"))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
ResponseStatus status = object.getIntValue("result") == 1 ? ResponseStatus.SUCCESS : ResponseStatus.FAILURE;
|
ResponseStatus status = object.getIntValue("result") == 1 ? ResponseStatus.SUCCESS : ResponseStatus.FAILURE;
|
||||||
return AuthResponse.builder().code(status.getCode()).msg(status.getMsg()).build();
|
return AuthResponse.builder().code(status.getCode()).msg(status.getMsg()).build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class AuthCodingRequest extends BaseAuthRequest {
|
|||||||
.gender(AuthUserGender.getRealGender(object.getString("sex")))
|
.gender(AuthUserGender.getRealGender(object.getString("sex")))
|
||||||
.email(object.getString("email"))
|
.email(object.getString("email"))
|
||||||
.remark(object.getString("slogan"))
|
.remark(object.getString("slogan"))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.CODING)
|
.source(AuthSource.CODING)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class AuthCsdnRequest extends BaseAuthRequest {
|
|||||||
}
|
}
|
||||||
return AuthUser.builder()
|
return AuthUser.builder()
|
||||||
.username(object.getString("username"))
|
.username(object.getString("username"))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.CSDN)
|
.source(AuthSource.CSDN)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ public class AuthDingTalkRequest extends BaseAuthRequest {
|
|||||||
object = object.getJSONObject("user_info");
|
object = object.getJSONObject("user_info");
|
||||||
return AuthUser.builder()
|
return AuthUser.builder()
|
||||||
.nickname(object.getStr("nick"))
|
.nickname(object.getStr("nick"))
|
||||||
|
.username(object.getStr("nick"))
|
||||||
.source(AuthSource.DINGTALK)
|
.source(AuthSource.DINGTALK)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class AuthGiteeRequest extends BaseAuthRequest {
|
|||||||
.location(object.getString("address"))
|
.location(object.getString("address"))
|
||||||
.email(object.getString("email"))
|
.email(object.getString("email"))
|
||||||
.remark(object.getString("bio"))
|
.remark(object.getString("bio"))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.GITEE)
|
.source(AuthSource.GITEE)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public class AuthGithubRequest extends BaseAuthRequest {
|
|||||||
.location(object.getString("location"))
|
.location(object.getString("location"))
|
||||||
.email(object.getString("email"))
|
.email(object.getString("email"))
|
||||||
.remark(object.getString("bio"))
|
.remark(object.getString("bio"))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.GITHUB)
|
.source(AuthSource.GITHUB)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class AuthOschinaRequest extends BaseAuthRequest {
|
|||||||
.location(object.getString("location"))
|
.location(object.getString("location"))
|
||||||
.gender(AuthUserGender.getRealGender(object.getString("gender")))
|
.gender(AuthUserGender.getRealGender(object.getString("gender")))
|
||||||
.email(object.getString("email"))
|
.email(object.getString("email"))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.OSCHINA)
|
.source(AuthSource.OSCHINA)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public class AuthQqRequest extends BaseAuthRequest {
|
|||||||
.nickname(object.getString("nickname"))
|
.nickname(object.getString("nickname"))
|
||||||
.avatar(avatar)
|
.avatar(avatar)
|
||||||
.gender(AuthUserGender.getRealGender(object.getString("gender")))
|
.gender(AuthUserGender.getRealGender(object.getString("gender")))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.QQ)
|
.source(AuthSource.QQ)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
58
src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java
Normal file
58
src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
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.exception.AuthException;
|
||||||
|
import me.zhyd.oauth.model.AuthSource;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 淘宝登录
|
||||||
|
*
|
||||||
|
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
public class AuthTaobaoRequest extends BaseAuthRequest {
|
||||||
|
|
||||||
|
public AuthTaobaoRequest(AuthConfig config) {
|
||||||
|
super(config, AuthSource.TAOBAO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected AuthToken getAccessToken(String code) {
|
||||||
|
return AuthToken.builder()
|
||||||
|
.accessCode(code)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected AuthUser getUserInfo(AuthToken authToken) {
|
||||||
|
String accessCode = authToken.getAccessCode();
|
||||||
|
HttpResponse response = HttpRequest.post(UrlBuilder.getTaobaoAccessTokenUrl(this.config.getClientId(), this.config.getClientSecret(), accessCode, this.config.getRedirectUri())).execute();
|
||||||
|
JSONObject object = JSONObject.parseObject(response.body());
|
||||||
|
if (object.containsKey("error")) {
|
||||||
|
throw new AuthException(ResponseStatus.FAILURE + ":" + object.getString("error_description"));
|
||||||
|
}
|
||||||
|
authToken.setAccessToken(object.getString("access_token"));
|
||||||
|
authToken.setRefreshToken(object.getString("refresh_token"));
|
||||||
|
authToken.setExpireIn(object.getIntValue("expires_in"));
|
||||||
|
authToken.setUid(object.getString("taobao_user_id"));
|
||||||
|
authToken.setOpenId(object.getString("taobao_open_uid"));
|
||||||
|
|
||||||
|
String nick = GlobalAuthUtil.urlDecode(object.getString("taobao_user_nick"));
|
||||||
|
return AuthUser.builder()
|
||||||
|
.username(nick)
|
||||||
|
.nickname(nick)
|
||||||
|
.gender(AuthUserGender.UNKNOW)
|
||||||
|
.token(authToken)
|
||||||
|
.source(AuthSource.TAOBAO)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -56,7 +56,7 @@ public class AuthTencentCloudRequest extends BaseAuthRequest {
|
|||||||
.gender(AuthUserGender.getRealGender(object.getString("sex")))
|
.gender(AuthUserGender.getRealGender(object.getString("sex")))
|
||||||
.email(object.getString("email"))
|
.email(object.getString("email"))
|
||||||
.remark(object.getString("slogan"))
|
.remark(object.getString("slogan"))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.TENCEN_CLOUD)
|
.source(AuthSource.TENCEN_CLOUD)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class AuthWeChatRequest extends BaseAuthRequest {
|
|||||||
.avatar(object.getString("headimgurl"))
|
.avatar(object.getString("headimgurl"))
|
||||||
.location(object.getString("country") + "-" + object.getString("province") + "-" + object.getString("city"))
|
.location(object.getString("country") + "-" + object.getString("province") + "-" + object.getString("city"))
|
||||||
.gender(AuthUserGender.getRealGender(object.getString("sex")))
|
.gender(AuthUserGender.getRealGender(object.getString("sex")))
|
||||||
.accessToken(accessToken)
|
.token(authToken)
|
||||||
.source(AuthSource.WECHAT)
|
.source(AuthSource.WECHAT)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,24 +35,28 @@ public class AuthWeiboRequest extends BaseAuthRequest {
|
|||||||
String accessTokenStr = response.body();
|
String accessTokenStr = response.body();
|
||||||
JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr);
|
JSONObject accessTokenObject = JSONObject.parseObject(accessTokenStr);
|
||||||
if (accessTokenObject.containsKey("error")) {
|
if (accessTokenObject.containsKey("error")) {
|
||||||
throw new AuthException("Unable to get token from gitee using code [" + code + "]");
|
throw new AuthException("Unable to get token from weibo using code [" + code + "]:" + accessTokenObject.getString("error_description"));
|
||||||
}
|
}
|
||||||
String accessToken = accessTokenObject.getString("access_token");
|
|
||||||
String uid = accessTokenObject.getString("uid");
|
|
||||||
return AuthToken.builder()
|
return AuthToken.builder()
|
||||||
.accessToken(String.format("uid=%s&access_token=%s", uid, accessToken))
|
.accessToken(accessTokenObject.getString("access_token"))
|
||||||
|
.uid(accessTokenObject.getString("uid"))
|
||||||
|
.expireIn(accessTokenObject.getIntValue("remind_in"))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AuthUser getUserInfo(AuthToken authToken) {
|
protected AuthUser getUserInfo(AuthToken authToken) {
|
||||||
String accessToken = authToken.getAccessToken();
|
String accessToken = authToken.getAccessToken();
|
||||||
|
String uid = authToken.getUid();
|
||||||
HttpResponse response = HttpRequest.get(UrlBuilder.getWeiboUserInfoUrl(accessToken))
|
HttpResponse response = HttpRequest.get(UrlBuilder.getWeiboUserInfoUrl(accessToken))
|
||||||
.header("Authorization", "OAuth2 " + accessToken)
|
.header("Authorization", "OAuth2 " + String.format("uid=%s&access_token=%s", uid, accessToken))
|
||||||
.header("API-RemoteIP", IpUtils.getIp())
|
.header("API-RemoteIP", IpUtils.getIp())
|
||||||
.execute();
|
.execute();
|
||||||
String userInfo = response.body();
|
String userInfo = response.body();
|
||||||
JSONObject object = JSONObject.parseObject(userInfo);
|
JSONObject object = JSONObject.parseObject(userInfo);
|
||||||
|
if(object.containsKey("error")) {
|
||||||
|
throw new AuthException(object.getString("error"));
|
||||||
|
}
|
||||||
return AuthUser.builder()
|
return AuthUser.builder()
|
||||||
.username(object.getString("name"))
|
.username(object.getString("name"))
|
||||||
.avatar(object.getString("profile_image_url"))
|
.avatar(object.getString("profile_image_url"))
|
||||||
@@ -61,7 +65,7 @@ public class AuthWeiboRequest extends BaseAuthRequest {
|
|||||||
.location(object.getString("location"))
|
.location(object.getString("location"))
|
||||||
.remark(object.getString("description"))
|
.remark(object.getString("description"))
|
||||||
.gender(AuthUserGender.getRealGender(object.getString("gender")))
|
.gender(AuthUserGender.getRealGender(object.getString("gender")))
|
||||||
.accessToken(GlobalAuthUtil.parseStringToMap(accessToken).get("access_token"))
|
.token(authToken)
|
||||||
.source(AuthSource.WEIBO)
|
.source(AuthSource.WEIBO)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,9 @@ public abstract class BaseAuthRequest implements AuthRequest {
|
|||||||
case WECHAT:
|
case WECHAT:
|
||||||
authorizeUrl = UrlBuilder.getWeChatAuthorizeUrl(config.getClientId(), config.getRedirectUri());
|
authorizeUrl = UrlBuilder.getWeChatAuthorizeUrl(config.getClientId(), config.getRedirectUri());
|
||||||
break;
|
break;
|
||||||
|
case TAOBAO:
|
||||||
|
authorizeUrl = UrlBuilder.getTaobaoAuthorizeUrl(config.getClientId(), config.getRedirectUri());
|
||||||
|
break;
|
||||||
case GOOGLE:
|
case GOOGLE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ public class UrlBuilder {
|
|||||||
private static final String WECHAT_REFRESH_TOKEN_PATTERN = "{0}?appid={1}&grant_type=refresh_token&refresh_token={2}";
|
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";
|
private static final String WECHAT_USER_INFO_PATTERN = "{0}?access_token={1}&openid={2}&lang=zh_CN";
|
||||||
|
|
||||||
|
private static final String TAOBAO_AUTHORIZE_PATTERN = "{0}?response_type=code&client_id={1}&redirect_uri={2}&state=&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";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取githubtoken的接口地址
|
* 获取githubtoken的接口地址
|
||||||
*
|
*
|
||||||
@@ -465,4 +468,28 @@ public class UrlBuilder {
|
|||||||
public static String getWeChatRefreshUrl(String clientId, String refreshToken) {
|
public static String getWeChatRefreshUrl(String clientId, String refreshToken) {
|
||||||
return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, ApiUrl.WECHAT.refresh(), clientId, refreshToken);
|
return MessageFormat.format(WECHAT_REFRESH_TOKEN_PATTERN, ApiUrl.WECHAT.refresh(), clientId, refreshToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取Taobao token的接口地址: 淘宝的授权登录,在这一步就会返回用户信息
|
||||||
|
*
|
||||||
|
* @param clientId taobao应用的App Key
|
||||||
|
* @param clientSecret taobao应用的App Secret
|
||||||
|
* @param code taobao授权前的code,用来换token
|
||||||
|
* @param redirectUri 待跳转的页面
|
||||||
|
* @return full url
|
||||||
|
*/
|
||||||
|
public static String getTaobaoAccessTokenUrl(String clientId, String clientSecret, String code, String redirectUri) {
|
||||||
|
return MessageFormat.format(TAOBAO_ACCESS_TOKEN_PATTERN, ApiUrl.TAOBAO.accessToken(), clientId, clientSecret, code, redirectUri);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取Taobao授权地址
|
||||||
|
*
|
||||||
|
* @param clientId Taobao 应用的Client ID
|
||||||
|
* @param redirectUrl Taobao 应用授权成功后的回调地址
|
||||||
|
* @return full url
|
||||||
|
*/
|
||||||
|
public static String getTaobaoAuthorizeUrl(String clientId, String redirectUrl) {
|
||||||
|
return MessageFormat.format(TAOBAO_AUTHORIZE_PATTERN, ApiUrl.TAOBAO.authorize(), clientId, redirectUrl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
12
update.md
Normal file
12
update.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
### 2019/05/18
|
||||||
|
1. 发布1.1.0版本的jar包到公开仓库(支持qq和微信登录)
|
||||||
|
2. 支持淘宝登录
|
||||||
|
3. 修改`AuthUser.java`类中的`accessToken`属性,由原本的~~accessToken (String)~~改为`token (AuthToken)`
|
||||||
|
4. 修复一些bug
|
||||||
|
5. 发布1.2.0版本的jar包到公开仓库(支持淘宝登录)
|
||||||
|
|
||||||
|
----
|
||||||
|
### 2019/05/17
|
||||||
|
1. 增加qq和微信的授权登录
|
||||||
|
2. 修改getAccessToken方法的返回值
|
||||||
Reference in New Issue
Block a user