干货|JustAuth三方账号授权登录免费搭建全流程

三方登录的方式想必大家都很熟悉,基本健全的网页都会整几个入口,比如日常的微信、QQ,金融的支付宝,音视频的抖音、快手,码农领域的Github、Gitee等。

作为功能测试,我们就随机取一个简单的三方授权Gitee来尝试下。由于最近ChhatGPT写代码也是很火,这次的测试主要是chatGPT主导,本人负责辅助实现和测试,不经感叹效率高、能力强!

  • 一、三方登录常规的原理和流程
  • 二、关于JustAuth
  • 三、搭建全流程
    • 3.1 前期准备:内网穿透
    • 3.2 前期准备:申请一个三方登录授权应用
    • 3.3 开发指南:引入组件
    • 3.4 开发指南:构建一个基本的授权登录框架
    • 3.5 JustAuth+Gitee的三方登录

一、三方登录常规的原理和流程

  1. 用户点击第三方登录按钮,跳转到第三方平台的授权页面。

  2. 用户在第三方平台的授权页面上登录,确认授权。跳转到本地的服务,组装参数配置(response_type/client_id/redirect_uri/state,不同三方参数名可能不同,性质类似),请求三方平台。

  3. 第三方平台验证用户身份,生成授权码或访问令牌(state-对应提交过去的唯一值,code/auth_code,不同三方参数名可能不同,性质类似)。

  4. 用户的浏览器重定向回原网站(根据提交的redirect_uri进行回调),并将授权码或访问令牌传递给原网站。

  5. 原网站使用授权码或访问令牌向第三方平台请求用户信息(用户ID、头像、昵称等)。

  6. 第三方平台返回用户信息给原网站。

  7. 原网站使用用户信息创建或更新本地用户账号,完成用户登录。

了解了基本思路之后,java开发的角度,肯定上来先找轮子(如果有要求要自己实现的话,也可以参考轮子的代码)

这边简单测试,选用了Spring Boot+ JustAuth + Thymeleaf (+ Spring Security 完全没有登录逻辑,可以不加) + IDEA + 内网穿透

以上组件,基本都比较熟悉,简单聊一下 JustAuth

二、关于JustAuth

JustAuth 是一个开源的 Java 三方登录集成工具,它可以帮助开发者快速集成第三方登录功能。

目前支持超过 20 种第三方平台的登录认证,包括但不限于:GitHub、Gitee、微信、QQ、微博、Google、Facebook、Twitter、LinkedIn 等。

使用 JustAuth 可以避免开发者需要针对每个第三方平台编写繁琐的登录认证代码,从而提高开发效率。

从2018年11月开始,一经发布就受到大量的支持,截止目前经过一个个开源人的伟大奉献,到2023年3月10日,JustAuth项目在Github已经有14.5K的star数,足以窥见它的成绩。

下面就借这轮子,一起学习了解下本地测试三方登录的实操流程。前后流程会比较长,请耐心看完。

三、搭建全流程

3.1 前期准备:内网穿透

关于本地开发工具IDEA这就不用多说了,关于使用其他开发工具都是可以的。

由于我们要本地对接公网做联调测试,所以需要内网穿透或者其他自己配置代理的方式都行。

我这边是之前使用购买的花生壳一个6块的域名,并且有送2个内网穿透的配置体验机会,所以就选择这个,这个产品做的也是比较好用。但是HTTP【为响应《网络安全法》,将于2022年6月9日开始,为您提供更安全的外网访问服务,暂停使用HTTP映射】。但是依旧可以配置HTTPS的访问方式,映射本地HTTP的端口都是可以的。

具体配置方式参考:https://service.oray.com/question/8156.html
我参照以上指南,是可以配置好一个公网可访问,代理本地127.0.0.1:8080的接口。

已经具备了以上条件后,继续往下走。

3.2 前期准备:申请一个三方登录授权应用

需要在你需要三方登录对应的平台上去申请三方登录的权限,这边拿Gitee举例。

Gitee官方OAuth的文档:https://gitee.com/api/v5/oauth_doc#/
其中包含:应用名称(随意)、应用描述(随意)、应用主页(随意)、应用回调地址(这是主要的,你自己服务可以回调的地址)、权限(按需选择)
填写好之后直接提交配置,就可以获取接口所需的client-id和client-secret。

在这里插入图片描述

  1. 在 修改资料 -> 第三方应用,创建要接入码云的应用。
  2. 填写应用相关信息,勾选应用所需要的权限。其中: 回调地址是用户授权后,码云回调到应用,并且回传授权码的地址。正常三方登录,勾选用户权限+个人邮箱信息基本就够了。
  3. 创建成功后,会生成 Cliend ID 和 Client Secret。他们将会在上述OAuth2 认证基本流程用到。
    在这里插入图片描述

3.3 开发指南:引入组件

确定具备一个基本的java\maven的项目,在pom.xml中引入

  • Spring Boot
  • JustAuth
  • Thymeleaf
  • Spring Security 不需要其他认证,可以不加

这边为了测试偷懒,引入了【justauth-spring-boot-starter】,以下是测试的POM

<dependencies><dependency><groupId>com.xkcoding.justauth</groupId><artifactId>justauth-spring-boot-starter</artifactId><version>1.4.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除 Spring Boot 默认的日志依赖 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!-- Thymeleaf 模板引擎 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- Spring Security 安全框架 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency></dependencies>

3.4 开发指南:构建一个基本的授权登录框架

以下含非必须环节,不需要可自动过滤。

SpringSecurity身份验证,内置一个账号密码:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/home").authenticated().antMatchers("/oauth/**").permitAll().anyRequest().permitAll().and().formLogin().loginPage("/login").defaultSuccessUrl("/home").failureUrl("/login?error=true").and().logout().logoutSuccessUrl("/login");}@Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user").password("{noop}password").roles("USER").and().withUser("admin").password("{noop}123456").roles("ADMIN");}
}

简单配备一个日志输出:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>

简单配备一个登录页:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Login</title>
</head>
<body>
<h1>Login</h1>
<div th:if="${param.error}"><p>Invalid username and password.</p>
</div>
<div th:if="${param.logout}"><p>You have been logged out.</p>
</div>
<form th:action="@{/login}" method="post"><div><label for="username">Username:</label><input type="text" id="username" name="username"/></div><div><label for="password">Password:</label><input type="password" id="password" name="password"/></div><div><button type="submit">Login</button></div>
</form>
<div><a th:href="@{/oauth/login/gitee}"><img src="https://huashuimoyu.com/image/thirdlogo/gitee.png" width="40px" height="40px"/></a>
</div>
</body>
</html>

简单配备一个登录跳转逻辑:

@Controller
public class HomeController {@GetMapping("/")public String home() {return "home";}@GetMapping("/home")public String home2() {return "home";}@GetMapping("/login")public String login() {return "login";}@PostMapping("/login")public String loginWithUsenamePassword(String username,String password){System.out.println(username);System.out.println(password);return "success";}
}

到这边,使用Springboot+SpringSecurity 依靠登录框进行账号密码登录的基本流程可以通了,此外依赖花生壳一个映射的配置,使用公网一个https的访问路径就可以访问到这个登录页了。
在这里插入图片描述

3.5 JustAuth+Gitee的三方登录

下面接入JustAuth补充Gitee的三方登录
前面依赖已经引入了,使用自动装配,只要在application的配置文件配置下、书写确定的跳转和回调接口即可

justauth:enabled: truetype:QQ:GITEE:client-id: 56ba1xxxxxx3c7dclient-secret: 90c7xxxxxx129a97redirect-uri: https://exxxxxxxxn/oauth/gitee/callback #就你本地自己提供出去的登录跳转的API,注意是公网可访问的

使用JustAuth简单实现一个调用和回调:

刚才在登录页就简单用一张图片链接触发一个三方登录请求。

<div><a th:href="@{/oauth/login/gitee}"><img src="https://huashuimoyu.com/image/thirdlogo/gitee.png" width="40px" height="40px"/></a>
</div>

点击图片后,跳转到后端接口,后端接口组装认证参数,提交到Gitee接口。

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

请求Gitee,跳转到Gitee的授权登录页,选择想要授予的权限,点击确定。
在这里插入图片描述

确定后,Gitee就会将网址跳转到我们提交的redirect_url上,我们做出正确响应即可。

    @RequestMapping("/{type}/callback")public AuthResponse login(@PathVariable String type, AuthCallback callback) {AuthRequest authRequest = factory.get(type);AuthResponse response = authRequest.login(callback);System.out.println("【response】= {}"+JSON.toJSONString(response));return response;}

接口获取授权信息:
在这里插入图片描述
这个时候,我们的页面可以回到一个授权成功,正在登录页。我们可以在这个时候拿到Gitee用户的一些昵称、头像、uid这些信息,记录在自己网站中,后期可以直接认证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8165.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】利用chatGPT入门机器学习(附代码)

1. 线性回归的例子&#xff1a;从简单到复杂 2. 使用随机森林分类器对鸢尾花数据集进行分类 3. 使用支持向量机分类器对乳腺癌数据集进行分类 机器学习算法可以用很多方法分类&#xff0c;但一种常见的分类方法是根据算法是监督学习、无监督学习还是半监督学习。 监督学习算…

Chatgpt提升工作效率的7种用法

Chatgpt在人工智能领域越来越受到重视。以前我们只能通过专业的工具来完成各种任务&#xff0c;但现在我们可以通过Chatgpt来解决一些日常任务&#xff0c;提高工作效率。下面是Chatgpt如何提升工作效率的7种用法。 ​ 1.写周报 写周报是很多打工人甚至研究深每周都要完成的任…

GPT-4 VS ChatGPT:训练、性能、能力和限制的探索

GPT-4是一种改进&#xff0c;但是应该适当降低期望 当OpenAI在2022年末推出ChatGPT时&#xff0c;震惊了全世界。这个新的生成式语言模型预计将彻底改变包括媒体、教育、法律和技术在内的整个行业。简而言之&#xff0c;ChatGPT听起来可以颠复一切。甚至在我们没有时间真正设想…

摆脱网络限制:用Vercel打造属于你的ChatGPT网站

摆脱网络限制&#xff1a;用Vercel打造属于你的ChatGPT网站 前言 上一篇分享了如何用自己的服务器搭建chatgpt服务器&#xff0c;但是需要你有一个服务器&#xff0c;还是有点成本的。今天我带来一个无需自备服务器的方式&#xff0c;让你也能搭建属于自己的chatgpt专属助手&a…

oa人员导入模板_巧用OA系统模板办公,让重复的事情简单做

是什么让我们的工作变得低效&#xff1f; 机械的重复绝对算得上一项。有时候&#xff0c;我们不得不花费大量的时间去进行信息的重复填写、格式的重复校对&#xff0c;却没有进行相应模板的总结&#xff0c;让简单的事情变得复杂。 那么&#xff0c;如何才能告别低效工作&#…

​如何高效开发一个OA办公系统​?

如何才能高效开发一个OA办公系统&#xff1f;这篇教你使用零代码工具从0-1搭建一个OA办公系统&#xff0c;无需代码基础&#xff0c;只要你懂业务&#xff0c;只需3步即可搭建&#xff01; 先来看看效果—— 系统模板>> https://www.jiandaoyun.com/ 整个系统包含物资管…

通达OA工作流程-使用方法

第3章 工作流使用 3.1 新建工作 进入工作流新建工作&#xff0c;选择需要的流程即可新建。如果用户没有流程第一步的经办权限&#xff0c;那么用户在新建界面看不到这个流程&#xff1b;相应的&#xff0c;如果用户没有流程分类所有流程的经办权限&#xff0c;那么用户…

ChatGPT与OA平台:办公效率提升的最佳组合

OA平台&#xff0c;是企业办公自动化的一种重要形式。在这个信息化时代&#xff0c;OA平台已经成为企业必不可少的一部分&#xff0c;对企业的管理和生产效率起着重要的作用。而ChatGPT则是一种基于自然语言处理技术的人工智能模型&#xff0c;它能够自主学习并进行语言生成。那…

离谱!美国教授用ChatGPT「证实」论文抄袭,半个班学生惨遭挂科

【导读】天下苦GPT检测器久矣&#xff01;用AI的怕被揪出来&#xff0c;没用AI的怕被冤枉。最近&#xff0c;又发生了一起被AI误判的冤假错案。 离了个大谱&#xff01; 辛辛苦苦码出的毕业论文&#xff0c;居然被教授拿去放在ChatGPT里检测&#xff0c;然后就被判定为抄袭&a…

【ChatGPT】一个凭借两百多年历史的公式崛起的巨星

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

原美团联合创始人欲打造中国版 OpenAI ;ChatGPT 爆红惊动谷歌退隐创始人布林;Gradle 8.0 发布|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

ChatGPT2论文解读《Language Models are Unsupervised Multitask Learners》(2019)

论文总结 以下是我阅读完整篇论文做的个人总结&#xff0c;包含了ChatGPT-2文章的主要内容&#xff0c;可以仅看【论文总结】章节。 数据集 自制了一个网页爬虫&#xff0c;被抓取的网页部分来自于社交平台&#xff0c;这些网页由人工进行过滤。最终生成WebText数据集&#…

ChatGPT风头正劲,Sam Altman透露发展新动态

引语&#xff1a;大家好我们是权知星球&#xff0c;开启你独特的知识星际之旅 目录 RazaHabib的完整记录 1.目前&#xff0c;OpenAI的发展受到GPU的严重限制。 2.OpenAI的发展路线图 3.「没有PMF」这个插件短时间内可能不会在API中出现。 4.除了与「类ChatGPT」竞争之外&…

警惕!ChatGPT爆火下的能耗危机,数据中心运营商挑战巨大

即使是数字产品也需要能源来开发和消耗&#xff0c;ChatGPT也不例外&#xff0c;据估计&#xff0c;机器学习工作中推理处理占算力消耗的80-90%&#xff0c;粗略计算&#xff0c;自ChatGPT于2022年11月30日上线以来&#xff0c;碳排放已超过814.61吨。 ——摘要 近期&#xff0…

云端需求助力跑赢周期,金山办公有望借助ChatGPT加速腾飞

与微软在办公领域“搏杀”了三十年的金山办公&#xff0c;或许正在迎来自己的“第二春”。 2月25日&#xff0c;金山办公&#xff08;688111&#xff09;发布2022年度业绩快报&#xff0c;全年营收38.85亿元人民币&#xff08;单位下同&#xff09;&#xff0c;同比增加18.44%&…

「从零入门推荐系统」21:chatGPT、大模型介绍

作者 | gongyouliu 编辑 | gongyouliu 自2022年11月30日OpenAI发布chatGPT以来&#xff0c;大模型技术掀起了新一轮人工智能浪潮。chatGPT在各个领域&#xff08;包括对话、摘要、内容生成、问题解答、识图、数学计算与推理、代码编写等&#xff09;取得了比之前算法好得多的成…

ChatGPT、Claude和Bard,三足鼎立之势已成

由前OpenAI研究人员创立的人工智能公司Anthropic推出了其更新版的聊天机器人Claude 2&#xff0c;与 ChatGPT和Google Bard等竞争对手正面硬刚。 由于国内的大模型基于不在一个能量量级&#xff0c;AI界大模型三足鼎立之势已经形成&#xff0c;背后的技术都在是谷歌Transformer…

ChatGPT 关闭 Plus 付费;首批因 AI 失业的人出现,某游戏公司裁掉半数原画师;Slint 1.0 发布|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

Kyligence Zen 产品体验 — 迈入云办公

一、前言&#xff1a; 本人在一家净水器行业的公司做售后助理的岗位&#xff0c;平时80%的主要工作&#xff0c;就是跟excel报表打交道&#xff0c;以下为本人的岗位职责&#xff1a; 由于也是初创几年的公司&#xff0c;领导在下班时候&#xff0c;也会经常有统计报表的需求&…

基于低成本CNC和热转印技术的双面PCB制备流程详解

基于低成本CNC和热转印技术的双面PCB制备 材料准备基本概念机械加工基本概念数控机床&#xff08;CNC&#xff09;机床加工刀具及其种类 PCB制造基本概念热转印铺铜 软件安装嘉立创EDA软件下载PCB绘制时的注意事项 FlatCAM&#xff08;用作将Gerber制版文转换成NC刀路文件&…