【开源项目】第三方登录框架JustAuth入门使用和源码分析

第三方登录框架JustAuth入门使用和源码分析

项目介绍

  • JustAuth,如你所见,它仅仅是一个第三方授权登录工具类库,它可以让我们脱离繁琐的第三方登录 SDK,让登录变得So easy!

  • JustAuth 集成了诸如:Github、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow等国内外数十家第三方平台。

项目地址

  • https://gitee.com/yadong.zhang/JustAuth
    在这里插入图片描述

快速入门

  1. 添加依赖
        <dependency>
            <groupId>com.xkcoding.justauth</groupId>
            <artifactId>justauth-spring-boot-starter</artifactId>
            <version>1.4.0</version>
        </dependency>
  1. 添加发起跳转第三方授权的接口和回调接口
@Slf4j
@RestController
@RequestMapping("/oauth")
public class AuthController {

    @Autowired
    private AuthRequestFactory factory;

    @GetMapping
    public List<String> list() {
        return factory.oauthList();
    }

    @GetMapping("/{type}/login")
    public void login(@PathVariable String type, HttpServletResponse response) throws IOException {
        AuthRequest authRequest = factory.get(type);
        response.sendRedirect(authRequest.authorize(AuthStateUtils.createState()));
    }

    @GetMapping("/{type}/callback")
    public AuthResponse login(@PathVariable String type, AuthCallback callback) {
        AuthRequest authRequest = factory.get(type);
        AuthResponse response = authRequest.login(callback);
        log.info("【response】= {}", response.toString());
        return response;
    }
}
  1. 配置文件中添加授权服务器的client_id,client_secret,redirect_url
server:
  port: 9981
justauth:
  enabled: true
  type:
    GITEE:
      client-id: ca219728...
      client-secret: 48a09e42...
      redirect-uri: http://127.0.0.1:9981/oauth/gitee/callback #项目中的回调地址
  cache:
    type: default

在这里插入图片描述

源码分析

  1. JustAuth帮助登录第三方框架,分为两个步骤,第一是获取授权码,第二是根据授权码获取token,从而获取用户信息。

  2. JustAuth在oauth协议中,主要扮演的是第三方应用程序。 需要在授权服务器上申请client_id和client_secret,在验证的时候需要获取到授权码code,然后拿到授权码换accesstoken,最后获取到资源服务器上的资源。详细流程可以看我以前写的这篇博客Ouath协议流程详解

跳转授权服务器

  1. 浏览器输入http://localhost:9981/oauth/gitee/login,核心逻辑就是进行字符串的拼接,AuthDefaultRequest#authorize(),将client_id、client_secret和response_type拼接在一起,重定向到授权服务器。
    @GetMapping("/{type}/login")
    public void login(@PathVariable String type, HttpServletResponse response) throws IOException {
        AuthRequest authRequest = factory.get(type);
        response.sendRedirect(authRequest.authorize(AuthStateUtils.createState()));
    }

会跳转到gitee的登录页面。

在这里插入图片描述

  1. 授权服务器登录,并进行授权,意味着验证完成,会重定向到redirect_url上,并且带有授权code参数。http://127.0.0.1:9981/oauth/gitee/callback?code=xxx

根据授权码获取用户信息

    @GetMapping("/{type}/callback")
    public AuthResponse login(@PathVariable String type, AuthCallback callback) {
        AuthRequest authRequest = factory.get(type);
        AuthResponse response = authRequest.login(callback);
        log.info("【response】= {}", response.toString());
        return response;
    }

AuthRequest的login方法,主要做了两件事,根据授权码获取token,还有根据token获取用户信息。

    public AuthResponse login(AuthCallback authCallback) {
        try {
            AuthChecker.checkCode(this.source, authCallback);
            if (!this.config.isIgnoreCheckState()) {
                AuthChecker.checkState(authCallback.getState(), this.source, this.authStateCache);
            }

            AuthToken authToken = this.getAccessToken(authCallback);
            AuthUser user = this.getUserInfo(authToken);
            return AuthResponse.builder().code(AuthResponseStatus.SUCCESS.getCode()).data(user).build();
        } catch (Exception var4) {
            Log.error("Failed to login with oauth authorization.", var4);
            return this.responseError(var4);
        }
    }

用授权码发起获取token的请求:
https://gitee.com/oauth/token?code=xxx&client_id=aaa&client_secret=bbb&grant_type=authorization_code&redirect_uri=http://127.0.0.1:9981/oauth/gitee/callback
用access_token获取用户信息:https://gitee.com/api/v5/user?access_token=xxx

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现第三方登录功能,我们可以使用Spring Security 6.x系列的扩展篇之一,集成第三方登录组件justauthJustAuth是一个简洁而高效的开源第三方登录组件,在实现第三方登录的过程中,它充分考虑了安全性和易用性。为了集成JustAuth,我们需要进行以下步骤: 1. 添加JustAuth的依赖:在项目的构建配置文件中,添加JustAuth的依赖项。这可以通过Maven或者Gradle来完成。 2. 配置JustAuth:在项目的配置文件中,配置JustAuth的相关参数。这包括相关的第三方登录平台的clientId、clientSecret等信息。 3. 创建登录入口:在应用程序中,创建一个登录入口页面,该页面展示了不同第三方登录平台的图标。用户可以点击这些图标来选择他们要使用第三方登录平台。 4. 处理授权回调:当用户选择了一个第三方登录平台并完成授权后,第三方登录平台将会重定向用户到我们预先配置的回调URL上。在该URL上,我们需要编写代码来处理回调,并获取到用户的信息。 5. 用户信息处理:在第四步中获取到用户的信息后,我们可以根据业务需求,将用户信息保存到数据库中,或者在数据库中查询该用户的信息。 通过以上步骤,我们就可以集成JustAuth,并实现第三方登录的功能。在实际开发中,我们还可以根据业务需求,对第三方登录进行安全性加固,例如加入验证码、防止重复登录等功能。 总结起来,Spring Security 6.x系列的扩展篇之集成第三方登录组件JustAuth可以帮助我们轻松实现第三方登录功能,提高用户登录的便捷性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值