本人项目中部分内容或方法来自来自justauth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy!
废话不多说,就俩字:
- 全:已集成十多家第三方平台(国内外常用的基本都已包含),仍然还在持续扩展中!
- 简:API就是奔着最简单去设计的(见后面
快速开始
),尽量让您用起来没有障碍感!
- 引入依赖
<dependency>
<groupId>org.miaixz</groupId>
<artifactId>bus-oauth</artifactId>
<version>x.x.x</version>
</dependency>
- 调用api
// 创建授权request
Provider provider = new GiteeProvider(Context.builder()
.clientId("clientId")
.clientSecret("clientSecret")
.redirectUri("redirectUri")
.build());
// 生成授权页面
provider.
authorize("state");
// 授权登录后会返回code(auth_code(仅限支付宝))、state,1.8.0版本后,可以用Callback类作为回调接口的参数
// 注:默认保存state的时效为3分钟,3分钟内未使用则会自动清除过期的state
provider.
login(callback);
String authorizeUrl = shooting.authorize("state");
获取到authorizeUrl
后,可以手动实现redirect到authorizeUrl
上
注:state
建议必传!state
在OAuth
的流程中的主要作用就是保证请求完整性,防止CSRF**风险,此处传的state
将在回调时传回
provider.login(callback);
授权登录后会返回code(auth_code(仅限支付宝)、authorization_code(仅限华为))、state,1.8.0版本后,用AuthCallback
类作为回调接口的入参
注:第三方平台中配置的授权回调地址,以本文为例,在创建授权应用时的回调地址应为:[host]/callback/gitee
注:refresh
功能,并不是每个平台都支持
provider.refresh(AccToken.builder().refreshToken(token).build());
注:revoke
功能,并不是每个平台都支持
provider.revoke(AccToken.builder().accessToken(token).build());
平台 | API | SDK |
---|---|---|
gitee | GiteeProvider | 参考文档 |
github | GithubProvider | 参考文档 |
WeiboProvider | 参考文档 | |
dingtalk | DingTalkProvider | 参考文档 |
baidu | BaiduProvider | 参考文档 |
coding | CodingProvider | 参考文档 |
tencentCloud | TencentCloudProvider | 参考文档 |
oschina | OschinaProvider | 参考文档 |
alipay | AlipayProvider | 参考文档 |
QqProvider | 参考文档 | |
WeChatProvider | 参考文档 | |
taobao | TaobaoProvider | 参考文档 |
GoogleProvider | 参考文档 | |
FacebookProvider | 参考文档 | |
douyin | DouyinProvider | 参考文档 |
LinkedinProvider | 参考文档 | |
microsoft | MicrosoftProvider | 参考文档 |
mi | MiProvider | 参考文档 |
toutiao | ToutiaoProvider | 参考文档 |
teambition | TeambitionProvider | 参考文档 |
renren | RenrenProvider | 参考文档 |
PinterestProvider | 参考文档 | |
stackoverflow | StackOverflowProvider | 参考文档 |
huawei | HuaweiProvider | 参考文档 |
微信开放平台 | WeChatOPProvider | 参考文档 |
微信公众平台 | WeChatMpProvider | 参考文档 |
企业微信 | WeChatEEProvider | 参考文档 |
kujiale | KujialeProvider | 参考文档 |
gitlab | GitlabProvider | 参考文档 |
meituan | MeituanProvider | 参考文档 |
eleme | ElemeProvider | 参考文档 |
csdn | CsdnProvider | 无 |
_请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用, 本项目中的CSDN登录只能针对少部分用户使用了
请先查阅以下资料:
Resource Owner
资源所有者,即代表授权客户端访问本身资源信息的用户(User),也就是应用场景中的“开发者A”Resource Server
资源服务器,托管受保护的用户账号信息,比如GithubAuthorization Server
授权服务器,验证用户身份然后为客户端派发资源访问令牌,比如GithubResource Server
和Authorization Server
可以是同一台服务器,也可以是不同的服务器,视具体的授权平台而有所差异Client
客户端,即代表意图访问受限资源的第三方应用
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
上面的流程图取自The OAuth 2.0 Authorization Framework#1.2
- (A) 用户打开客户端以后,客户端要求用户给予授权。
- (B) 用户同意给予客户端授权。
- (C) 客户端使用上一步获得的授权,向认证服务器申请令牌。
- (D) 认证服务器对客户端进行认证以后,确认无误,同意发放令牌
- (E) 客户端使用令牌,向资源服务器申请获取资源。
- (F) 资源服务器确认令牌无误,同意向客户端开放资源。
- Authorization Code
- 结合普通服务器端应用使用(web端常用的授权方式)
- Implicit
- 结合移动应用或 Web App 使用
- Resource Owner Password Credentials
- 适用于受信任客户端应用,例如同个组织的内部或外部应用
- Client Credentials
- 适用于客户端调用主服务API型应用(比如百度API Store)
- JustAuth: 第三方登录授权 SDK