《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个开源的第三方授权登录的工具类库——JustAuth。
JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录 SDK,让登录变得So easy!
JustAuth 集成了诸如:Github、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow等国内外数十家第三方平台。
JustAuth功能:
-
丰富的 OAuth 平台,支持国内外数十家知名的第三方平台的 OAuth 登录。
-
自定义 state,支持自定义 State 和缓存方式,开发者可根据实际情况选择任意缓存插件。
-
自定义 OAuth,提供统一接口,支持接入任意 OAuth 网站,快速实现 OAuth 登录功能。
-
自定义 Http,接口 HTTP 工具,开发者可以根据自己项目的实际情况选择相对应的HTTP工具。
-
自定义 Scope,支持自定义 scope,以适配更多的业务场景,而不仅仅是为了登录。
-
代码规范简单,代码严格遵守阿里巴巴的编码规约,结构清晰、逻辑简单。
如何使用
-
使用步骤
使用JustAuth总共分三步(这三步也适合于JustAuth支持的任何一个平台):
1、申请注册第三方平台的开发者账号
2、创建第三方平台的应用,获取配置信息( accessKey , secretKey , redirectUri )
3、使用该工具实现授权登陆
-
使用方式
引入依赖
<dependency>
<groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId>
<version>${latest.version}</version>
</dependency>
最新版本:
https://search.maven.org/search?q=g:me.zhyd.oauth%20AND%20a:JustAuth
调用api
// 创建授权request
AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder()
.clientId("clientId")
.clientSecret("clientSecret")
.redirectUri("redirectUri")
.build());
// 生成授权页面
authRequest.authorize("state");
// 授权登录后会返回code(auth_code(仅限支付宝))、state,1.8.0版本后,可以用AuthCallback类作为回调接口的参数
// 注:JustAuth默认保存state的时效为3分钟,3分钟内未使用则会自动清除过期的state
authRequest.login(callback);
注意:JustAuth从 v1.14.0 开始默认集成了的 simple-http 作为HTTP通用接口,鉴于一般项目中都已经集成了HTTP工具,比如OkHttp3、apache HttpClient、hutool-http,因此为了减少不必要的依赖,从v1.14.0 开始JustAuth将不会默认集成 hutool-http,如果开发者的项目是全新的或者项目内没有集成HTTP实现工具,请自行添加对应的HTTP实现类。
-
API分解
JustAuth的核心就是一个个的 request ,每个平台都对应一个具体的 request 类,所以在使用之前,需要就具体的授权平台创建响应的 request
// 创建授权request
AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder()
.clientId("clientId")
.clientSecret("clientSecret")
.redirectUri("redirectUri")
.build());
获取授权链接
String authorizeUrl = authRequest.authorize("state");
获取到 authorizeUrl 后,可以手动实现 redirect 到 authorizeUrl 上
伪代码
/**
* @param source 第三方授权平台,以本例为参考,该值为gitee(因为上面声明的AuthGiteeRequest)
*/
@RequestMapping("/render/{source}")
public void renderAuth(@PathVariable("source") String source, HttpServletResponse response) throws IOException {
AuthRequest authRequest = getAuthRequest(source);
String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
response.sendRedirect(authorizeUrl);
注意:state 建议必传!state 在OAuth的流程中的主要作用就是保证请求完整性,防止CSRF风险,此处传的 state 将在回调时传回
登录(获取用户信息)
AuthResponse response = authRequest.login(callback);
授权登录后会返回code(auth_code(仅限支付宝)、authorization_code(仅限华为))、state,1.8.0版本后,用 AuthCallback 类作为回调接口的入参
伪代码
/**
* @param source 第三方授权平台,以本例为参考,该值为gitee(因为上面声明的AuthGiteeRequest)
*/
@RequestMapping("/callback/{source}")
public Object login(@PathVariable("source") String source, AuthCallback callback) {
AuthRequest authRequest = getAuthRequest(source);
AuthResponse response = authRequest.login(callback);
return response;
注意:第三方平台中配置的授权回调地址,以本文为例,在创建授权应用时的回调地址应为:[host]/callback/gitee
刷新token
注意:refresh 功能,并不是每个平台都支持
AuthResponse response = authRequest.refresh(AuthToken.builder().refreshToken(token).build());
伪代码
/**
* @param source 第三方授权平台,以本例为参考,该值为gitee(因为上面声明的AuthGiteeRequest)
* @param token login成功后返回的refreshToken
*/
@RequestMapping("/refresh/{source}")
public Object refreshAuth(@PathVariable("source") String source, String token){
AuthRequest authRequest = getAuthRequest(source);
return authRequest.refresh(AuthToken.builder().refreshToken(token).build());
取消授权
注意:revoke 功能,并不是每个平台都支持
AuthResponse response = authRequest.revoke(AuthToken.builder().accessToken(token).build());
伪代码
/**
* @param source 第三方授权平台,以本例为参考,该值为gitee(因为上面声明的AuthGiteeRequest)
* @param token login成功后返回的accessToken
*/
@RequestMapping("/revoke/{source}/{token}")
public Object revokeAuth(@PathVariable("source") String source, @PathVariable("token") String token) throws IOException {
AuthRequest authRequest = getAuthRequest(source);
return authRequest.revoke(AuthToken.builder().accessToken(token).build());
集成抖音登录示例
1、申请应用
访问抖音开放平台 抖音开放平台 并登录,如果没有账号,请自行注册。
登录完成后,需要进行企业认证(只能企业认证)。
认证通过后,将显示如下内容:
在“管理中心”-“应用管理”页面,选择“创建应用”,再创建应用页面,选择“网站应用”
按需填写内容,注意,不可使用本地 host,只需要配置根域即可,如本例配置为 justauth.cn
填写示例如下:
填写完成后,提交审核,等待平台审核完成后,再进行下一步操作。
copy以下三个信息:App ID、App Key 和 网站回调域
2、集成JustAuth
集成部分参考上一章引入依赖、创建Request和生成授权地址。
我们可以直接使用以下方式生成第三方平台的授权链接:
String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
这个链接我们可以直接在后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到 iframe 中,适配网站设计。
—END—
开源地址:https://gitee.com/yadong.zhang/JustAuth
原文始发于微信公众号(开源技术专栏):快速完成第三方授权登录的工具类库JustAuth
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/53919.html