第三方授权登录组件

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 IDApp 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