前言:
此时咱们对“apacheauth”大致比较关切,姐妹们都需要了解一些“apacheauth”的相关文章。那么小编同时在网络上收集了一些有关“apacheauth””的相关内容,希望大家能喜欢,你们快快来了解一下吧!第三方平台授权登录,这在互联网产品的开发中是再常见不过的需求了。基于OAuth 2 的授权模式,使得可以更为方便地打通不同平台的用户授权验证,大大提升了用户的使用体验。然而,提供了第三方登录授权的平台五花八门,在实现第三方登录时往往需要同时实现多个不同平台,而提供了接口和授权方式又并不统一,逐一阅读开发文档去实现,耗时耗力。JustAuth,提供了号称史上最全的第三方登录,使得开发者可以为应用快速添加第三方登录功能。
简介
JustAuth 是 justauth 组织在 Github 上开源的第三方登录开源库,项目位于 ,同时也在 Gitee 开源,位于 ,目前版本为 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 使用 Java 开发,可以引入 JustAuth 依赖:
<dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth</artifactId> <version>${latest.version}</version></dependency>
JustAuth 默认集成 simple-http 作为 HTTP 通用接口。若项目内没有集成 HTTP 实现工具,需要自行添加对应的 HTTP 实现类,可以使用包括:hutool-http:
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-http</artifactId> <version>5.3.9</version></dependency>
httpclient,
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.12</version></dependency>
以及 okhttp:
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.0</version></dependency>
示例
第三方登录使用的是 OAuth 2 模式,授权流程参与的角色包括:
资源所有者(Resource Owner):代表授权客户端访问本身资源信息的用户资源服务器(Resource Server):托管受保护的用户账号信息授权服务器(Authorization Server):授权服务器,验证用户身份然后为客户端派发资源访问令牌客户端(Client):代表意图访问受限资源的第三方应用
整个授权的流程如下:
对于JustAuth 而言,其核心就是每个平台所对应的一个个具体的 request 类,在进行授权之前,需要就具体的平台创建对应的 request 实例:
// 创建授权requestAuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder() .clientId("clientId") .clientSecret("clientSecret") .redirectUri("redirectUri") .build());
在这个例子中,针对 Gitee 平台,使用 AuthGiteeReques 类,并配置在该平台的的开发者账号,包括 clientId,clientSecret,和 redirectUri。然后,就可以调用 authRequest 的 authorize 接口,获取对应的授权链接:
String authorizeUrl = authRequest.authorize("state");
获取授权链接后,可以进行手动重定向。一个简单的重定向回调实例如下:
/** * * @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,并调用回调:
AuthResponse response = authRequest.login(callback);
一个简单的回调接口可以这样实现:
/** * * @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 的刷新:
/** * * @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 实现:
/** * * @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 作为一个第三方登录组件库,提供了极为全面的平台支持,基本满足了第三方登录的日常需求,省去了重复阅读不同平台的 SDK 文档,和对接实现的麻烦,使用统一的接口,隐去了不同平台接口令人头疼的差异,使得第三方授权变得十分清晰明了,很方便地就能整合到业务应用中,大大提升了开发效率。同时,JustAuth 也提供了对于自定义平台验证的支持,使得其具备极强的可扩展性,可以适用于各种各样的业务场景,十分值得尝试。
标签: #apacheauth