第三方授权登录组件
JustAuth 是一款第三方授权登录的工具类库,支持 Github、Gitee、今日头条、支付宝、新浪微博、微信、飞书、Google、Facebook、Twitter、StackOverflow 等第三方平台的授权登录。
JustAuth 支持的第三方平台概览 :
功能特性
-
丰富的 OAuth 平台: 集成国内外数十家第三方平台,实现快速接入。 -
自定义 state: 支持自定义 State 和缓存方式,开发者可根据实际情况选择任意缓存插件。 -
自定义 OAuth: 提供统一接口,支持接入任意 OAuth 网站,快速实现 OAuth 登录功能。更容易适配自有的 OAuth 服务。 -
自定义 Http: 接口 HTTP 工具,开发者可以根据自己项目的实际情况选择相对应的 HTTP 工具。 -
自定义 Scope: 支持自定义 scope,以适配更多的业务场景,而不仅仅是为了登录。 -
代码规范·简单: JustAuth 代码严格遵守阿里巴巴编码规约,结构清晰、逻辑简单。
快速使用(以 QQ 为例)
申请应用
1、登录 QQ 互联平台
https://connect.qq.com/
2、申请开发者
进入“应用管理”页面:https://connect.qq.com/manage.html 如果是第一次使用,并且未进行过开发者认证,需要提交一下个人资料,待认证通过后方可创建应用。
3、添加应用
依次点击:应用管理 -> 网站应用 -> 创建应用,应用信息提交后,等待审核通过即可
应用审核通过后如下:
copy 以下三个信息:App ID
、App Key
和网站回调域
。
注意:“应用密钥”可保护你应用程序的安全,因此请确保其不会泄露!也不要与任何人共享你的“应用密钥”!!!
集成 JustAuth
1、引入依赖
<dependency>
<groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId>
<version>${latest.version}</version>
</dependency>
${latest.version}
表示当前最新的版本,可以在 https://github.com/justauth/JustAuth/releases 获取最新的版本信息。
2、创建 Request
AuthRequest authRequest = new AuthQqRequest(AuthConfig.builder()
.clientId("App ID")
.clientSecret("App Key")
.redirectUri("网站回调域")
.build());
3、生成授权地址
我们可以直接使用以下方式生成第三方平台的授权链接:
String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到 iframe 中,适配网站设计。
4、以上完整代码如下
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.request.AuthQqRequest;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
@RequestMapping("/oauth")
public class RestAuthController {
@RequestMapping("/render")
public void renderAuth(HttpServletResponse response) throws IOException {
AuthRequest authRequest = getAuthRequest();
response.sendRedirect(authRequest.authorize(AuthStateUtils.createState()));
}
@RequestMapping("/callback")
public Object login(AuthCallback callback) {
AuthRequest authRequest = getAuthRequest();
return authRequest.login(callback);
}
private AuthRequest getAuthRequest() {
return new AuthQqRequest(AuthConfig.builder()
.clientId("App ID")
.clientSecret("App Key")
.redirectUri("网站回调域")
.build());
}
}
快速测试
官方推荐使用 JustAuth-demo 示例项目进行测试。
使用步骤:
1、clone:https://github.com/justauth/JustAuth-demo.git
2、将上面申请的应用信息填入到RestAuthController#getAuthRequest
方法的对应位置中:
3、启动项目,访问 http://localhost:8443
4、选择对应的平台进行授权登录
5、登录完成后,可以访问 http://localhost:8443/users 查看已授权的用户
注意:
-
如果直接使用 JustAuth-demo 项目进行测试,那么在配置测试应用的“回调地址”时要严格按照以下格式配置: http://localhost:8443/oauth/callback/{平台名}
-
平台名参考 JustAuthPlatformInfo
枚举类names
相关地址
-
项目地址 : https://github.com/justauth/JustAuth -
官方文档 : https://www.justauth.cn/ -
示例项目:https://github.com/justauth/JustAuth-demo
相关地址
-
Gitee:https://gitee.com/dromara/MaxKey -
Github:https://github.com/dromara/MaxKey -
官方网站:http://www.maxkey.top
微信赞赏支付宝扫码领红包