前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JustAuth - 史上最全的第三方登录开源库

JustAuth - 史上最全的第三方登录开源库

作者头像
lyb-geek
发布2021-06-10 11:29:58
4.2K0
发布2021-06-10 11:29:58
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路

第三方平台授权登录,这在互联网产品的开发中是再常见不过的需求了。基于OAuth 2 的授权模式,使得可以更为方便地打通不同平台的用户授权验证,大大提升了用户的使用体验。然而,提供了第三方登录授权的平台五花八门,在实现第三方登录时往往需要同时实现多个不同平台,而提供了接口和授权方式又并不统一,逐一阅读开发文档去实现,耗时耗力。JustAuth,提供了号称史上最全的第三方登录,使得开发者可以为应用快速添加第三方登录功能。

JustAuth - 第三方登录

简介

JustAuth 是 justauth 组织在 Github 上开源的第三方登录开源库,项目位于 https://github.com/justauth/JustAuth,同时也在 Gitee 开源,位于 https://gitee.com/yadong.zhang/JustAuth,目前版本为 v1.15.6。

JustAuth 是一个第三方授权登录的 Java 工具类库,可以使开发者脱离繁琐的第三方登录SDK,使登录变得更为简单。JustAuth 十分全面,已经集成了数十家第三方平台,包括:Github、Gitee、微博、钉钉、百度、Coding、腾讯云、OSChina、支付宝、QQ、微信、淘宝、Google、Facebook、抖音、领英、小米、微软、今日头条、Teambition、StackOverflow、Pinterest、人人、华为、企业微信、酷家乐、Gitlab、美团、饿了么和推特等。同时,接口设计十分简单,上手十分轻松。JustAuth 支持自定义 State 缓存,支持各种分布式缓存组件;支持自定义 OAuth 平台,更容易适配自有的 OAuth 服务;支持自定义 HTTP 实现,不依赖单一的具体实现;支持自定义 Scope,支持更完善的授权体系等。

JustAuth官方网站

安装

JustAuth 使用 Java 开发,可以引入 JustAuth 依赖:

代码语言:javascript
复制
<dependency>
  <groupId>me.zhyd.oauth</groupId>
  <artifactId>JustAuth</artifactId>
  <version>${latest.version}</version>
</dependency>

JustAuth 默认集成 simple-http 作为 HTTP 通用接口。若项目内没有集成 HTTP 实现工具,需要自行添加对应的 HTTP 实现类,可以使用包括:hutool-http:

代码语言:javascript
复制
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-http</artifactId>
    <version>5.3.9</version>
</dependency>

httpclient,

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.12</version>
</dependency>

以及 okhttp:

代码语言:javascript
复制
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>4.8.0</version>
</dependency>

JustAuth Github

示例

第三方登录使用的是 OAuth 2 模式,授权流程参与的角色包括:

  • 资源所有者(Resource Owner):代表授权客户端访问本身资源信息的用户
  • 资源服务器(Resource Server):托管受保护的用户账号信息
  • 授权服务器(Authorization Server):授权服务器,验证用户身份然后为客户端派发资源访问令牌
  • 客户端(Client):代表意图访问受限资源的第三方应用

整个授权的流程如下:

OAuth2流程

对于JustAuth 而言,其核心就是每个平台所对应的一个个具体的 request 类,在进行授权之前,需要就具体的平台创建对应的 request 实例:

代码语言:javascript
复制
// 创建授权request
AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder()
        .clientId("clientId")
        .clientSecret("clientSecret")
        .redirectUri("redirectUri")
        .build());

在这个例子中,针对 Gitee 平台,使用 AuthGiteeReques 类,并配置在该平台的的开发者账号,包括 clientId,clientSecret,和 redirectUri。然后,就可以调用 authRequest 的 authorize 接口,获取对应的授权链接:

代码语言:javascript
复制
String authorizeUrl = authRequest.authorize("state");

获取授权链接后,可以进行手动重定向。一个简单的重定向回调实例如下:

代码语言:javascript
复制
/**
 * 
 * @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);
}

从当前页面,跳转到第三方平台的授权验证页面,并携带当前状态信息。

当用户完成了第三方平台的授权后,授权登录会返回 code,并调用回调:

代码语言:javascript
复制
AuthResponse response = authRequest.login(callback);

一个简单的回调接口可以这样实现:

代码语言:javascript
复制
/**
 * 
 * @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;
}

通过给 AuthRequest 的 login 接口提供一个 AuthCallback,实现授权码的回调。

另外,对于支持刷新 token 的平台,可以使用 refresh 接口进行 token 的刷新:

代码语言:javascript
复制
/**
 * 
 * @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 实现:

代码语言:javascript
复制
/**
 * 
 * @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());
}

JustAuth 对于各平台提供了统一的接口,使得多平台的授权登录的实现变得十分简单。同时,JustAuth 也在文档提供了不同平台的开发应用申请等具体流程,并提供了接口测试的平台,上手十分容易。

JustAuth登录测试平台

总结

JustAuth 作为一个第三方登录组件库,提供了极为全面的平台支持,基本满足了第三方登录的日常需求,省去了重复阅读不同平台的 SDK 文档,和对接实现的麻烦,使用统一的接口,隐去了不同平台接口令人头疼的差异,使得第三方授权变得十分清晰明了,很方便地就能整合到业务应用中,大大提升了开发效率。同时,JustAuth 也提供了对于自定义平台验证的支持,使得其具备极强的可扩展性,可以适用于各种各样的业务场景,十分值得尝试。

作者:每日开源代码 来源:https://www.toutiao.com/a6866466629929140744/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 安装
  • 示例
  • 总结
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档