使用开源项目JustAuth完成第三方登录

这篇具有很好参考价值的文章主要介绍了使用开源项目JustAuth完成第三方登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用开源项目JustAuth完成第三方登录

JustAuth项目源码地址:https://github.com/justauth/JustAuth
JustAuth文档地址:https://justauth.wiki/guide/quickstart/oauth/

此demo的项目地址:xfeng520/JustAuthDemo (gitee.com)

本文相关名词

  • 开发者 指使用JustAuth的开发者
  • 第三方 指开发者对接的第三方网站,比如:QQ平台、微信平台、微博平台
  • 用户 指最终服务的真实用户

JustAuth中的关键词

以下内容了解后,将会使你更容易地上手JustAuth。

  • clientId 客户端身份标识符(应用id),一般在申请完Oauth应用后,由第三方平台颁发,唯一
  • clientSecret 客户端密钥,一般在申请完Oauth应用后,由第三方平台颁发
  • redirectUri 开发者项目中的有效api地址。用户在确认第三方平台授权(登录)后,第三方平台会重定向到该地址,并携带code等参数
  • state 用来保持授权会话流程完整性,防止CSRF攻击的安全的随机的参数,由开发者生成

JustAuth流程图

使用开源项目JustAuth完成第三方登录

开搞

1.新建SpringBoot项目,配置随意,最终的pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xiongfeng</groupId>
    <artifactId>JustAuthTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>JustAuthTest</name>
    <description>JustAuthTest</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--        JustAuth包-->
        <dependency>
            <groupId>me.zhyd.oauth</groupId>
            <artifactId>JustAuth</artifactId>
            <version>1.16.5</version>
        </dependency>
        <!--        JustAuth所需要的hutool-http包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-http</artifactId>
            <version>5.3.9</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.新建controller包,新建JustAuthController.java文件,具体的代码及流程见注释

注意,以下代码中,我们的请求链接中是通过动态参数{source}去取的,这样可以方便的让我们集成任意平台,比如集成gitee时, 我们的请求地址就是:http://localhost:8080/oauth/render/gitee, 而回调地址就是http://localhost:8080/oauth/callback/gitee。

package com.xiongfeng.justauthtest.controller;

import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.request.AuthGiteeRequest;
import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @program: JustAuthTest
 * @description: 使用JustAuth实现第三方登录
 * @author: xiongfeng
 * @create: 2022-09-17 00:03
 **/
@RestController()
@RequestMapping("/oauth")
public class JustAuthController {
    /**
     * 通过JustAuth的AuthRequest拿到第三方的授权链接,并跳转到该链接页面
     *
     * @param response
     * @throws IOException
     */
    @RequestMapping("/render/{source}")
    public void renderAuth(HttpServletResponse response) throws IOException {
        AuthRequest authRequest = getAuthRequest();
        String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
        response.sendRedirect(authorizeUrl);
    }

    /**
     * 用户在确认第三方平台授权(登录)后, 第三方平台会重定向到该地址,并携带code、state等参数
     * authRequest.login通过code向第三方请求用户数据
     *
     * @param callback 第三方回调时的入参
     * @return 第三方平台的用户信息
     */
    @RequestMapping("/callback/{source}")
    public Object login(AuthCallback callback) {
        AuthRequest authRequest = getAuthRequest();
        return authRequest.login(callback);
    }

    /**
     * 创建授权request
     *
     * @return AuthRequest
     */
    private AuthRequest getAuthRequest() {
        return new AuthGiteeRequest(AuthConfig.builder()
                .clientId("19528e9e6505ce7028817f601b1a3a531776a1bf89020e9e35a5fdbe520c6085")
                .clientSecret("cadf7241b4a829b4e07d3dc1e60f74f2e5225b568e067294b5a76d28beaff03e")
                .redirectUri("http://localhost:8080/oauth/callback/gitee")
                .build());
    }
}

3.创建第三方应用

**1).**登录gitee,点击右上角用户头像,点击设置,点击第三方应用,点击创建应用

使用开源项目JustAuth完成第三方登录

**2).**我们按照提示填入我们的应用信息即可。

应用名称: 一般填写自己的网站名称即可

应用描述: 一般填写自己的应用描述即可

应用主页: 填写自己的网站首页地址

应用回调地址: 重点,该地址为用户授权后需要跳转到的自己网站的地址,默认携带一个code参数 这里的回调地址应该为JustAuthController中的/callback/{source}接口

权限: 根据页面提示操作,默认勾选第一个就行,因为我们只需要获取用户信息即可

**3).**以上信息输入完成后,点击确定按钮创建应用。创建完成后,点击进入应用详情页,可以看到应用的密钥等信息

使用开源项目JustAuth完成第三方登录

4).复制以下三个信息:Client IDClient Secret应用回调地址。到JustAuthController中的getAuthRequest()方法中

private AuthRequest getAuthRequest() {
        return new AuthGiteeRequest(AuthConfig.builder()
                .clientId("19528e9e6505ce7028817f601b1a3a531776a1bf89020e9e35a5fdbe520c6085")
                .clientSecret("cadf7241b4a829b4e07d3dc1e60f74f2e5225b568e067294b5a76d28beaff03e")
                .redirectUri("http://localhost:8080/oauth/callback/gitee")
                .build());
    }

以上工作完成后,我们直接启动项目,然后在浏览器中访问http://localhost:8080/oauth/render/gitee

可以debug查看具体流程。

.redirectUri(“http://localhost:8080/oauth/callback/gitee”)
.build());
}

以上工作完成后,我们直接启动项目,然后在浏览器中访问http://localhost:8080/oauth/render/gitee

可以debug查看具体流程。

原博客地址:https://cloud.tencent.com/developer/article/1624287文章来源地址https://www.toymoban.com/news/detail-421080.html

到了这里,关于使用开源项目JustAuth完成第三方登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何去阅读开源的第三方库的源码

    2023年9月2日,周六晚上 今天探索了一天如何去阅读第三方库的源码,终有所获。 再结合以前看cereal项目的源码的经验,于是就有了这篇博客。 我个人认为: 在阅读一个开源的第三方库之前,要先学会这个第三方库的一些简单用法,然后再顺着这个学会的用法去看相关的源码

    2024年02月09日
    浏览(47)
  • 项目中拖拽元素,可以使用html的draggable属性,当然也可以用第三方插件interact

    html的draggable属性需要自己写逻辑,用人家封装好的代码简单逻辑清楚,非常香 链接: https://blog.csdn.net/vvv3171071/article/details/122705408

    2024年02月08日
    浏览(54)
  • pyhon项目中,使用pip安装第三方插件之后,明明使用pip list可以查到,但是在项目中import时仍然找不到怎么办?

    认识pip: python中的pip是用来安装python第三方库的工具,是安装python的时候自带的。         1.安装方式:pip install 第三方库名,比如:pip install selenium         2.查看已安装的所有第三方库:pip list 或 pip3 list  (如果系统中同时安装了Python2和Python3,则pip默认给Python2用

    2024年02月15日
    浏览(39)
  • 在bilibili平台利用第三方推流完成摄像头(手机)、电脑屏幕、背景共存直播。以线上自习室为例

    很早之前就想在b站参加一个线上自习室监督自己,但是目前的自习室要么不是免费的,要么人数过多起不到监督效果,在看到b站有相关分区直播后我尝试自己直播这个。 先上直播效果 摄像头(可以用手机摄像头代替) 电脑 iVCam(手机版) iVCam(电脑版) OBS Studio 哔哩哔哩

    2024年02月09日
    浏览(94)
  • Android 项目调用第三方库so动态库

    在Android NDK开发中,可以通过自己编写C/C++代码来构建so动态库进行调用之外,还可以把so动态库提供给第三方使用;接下来,我将介绍在新创建的Android 项目(或已存在的Android 项目)中如何调用第三方so动态库。 关于如何进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用

    2024年02月16日
    浏览(45)
  • Vue 项目中引入本地第三方 JS 库

    ESLint 语法检测会报错: \\\'$\\\' is not define   ESLint 语法检测不会报错   ESLint 语法检测不会报错   ESLint 语法检测会报错: \\\'$\\\' is not define 项目开启了 ESLint 语法检测的话,会报一个 error : \\\'$\\\' is not defined。 1、在每一个使用 $ 的代码行上 加  /* eslint-disable */  ,忽略该报错。 2、在根

    2024年02月04日
    浏览(77)
  • Python第三方库安装——使用vscode、pycharm安装Python第三方库

    在这里介绍vscode、Pycharm安装python第三方库的方法。 操作系统:windows10 专业版 环境如下: Pycharm Comunity 2022.3 Visual Studio Code 2019 Python 3.8 pip:23.0.1 pycharm是一款很强大的、专用于写python的ide。 小白式安装第三方库往往能给初学者一种 “高级感” ,而对于使用惯了Linux的人而言

    2024年02月03日
    浏览(78)
  • keycloak~为keycloak-services项目添加第三方模块(首创)

    我们在对keycloak框架中的核心项目 keycloak-services 进行二次开发过程中,发现了一个问题,当时有这种需求,在keycloak-services中需要使用infinispan缓存,我们直接添加infinispan-core引用之后,在启动keycloak进出错了,提示我们没有找到infinispan.Cache,于是我尝试了如下方法,最终解决

    2024年02月08日
    浏览(35)
  • idea 创建java项目,引入第三方jar,打包jar包

    前提:已安装好JDK,并且配置好了JDK环境变量。 直接点击create创建即可 刚创建完的项目可能是没有out目录的,当我们执行一次main方法,代码会经过编译,然后生成out目录 打印输出结果,我们第一个java Hello word 就执行完啦。 创建Java文件和包 下载jar包的网站:https://mvnrepos

    2024年02月11日
    浏览(62)
  • 项目接入阿里云内容审核增强版本,文本审核与图片审核。第三方审核

            自己的项目新增了一个社区的服务,社区可以发布文章,浏览文章,类似一些平台的文章管理的功能。那么发布的文章肯定是需要审核的,但是又不能全部为人工审核,这样的话效率太低也忙不过来,所以就想着先引入一个自动审核,只有当自动审核不通过之后,

    2024年02月02日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包