OAuth2.0 三方登录(Google登录)

一、OAuth2.0流程

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/030181c5a2cc4248a4fcc7f72d72f8e8.png![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/de6793bc88364fec8398ad226237d772.png

  • (A)客户端向从资源所有者请求授权。
  • (B)客户端收到授权许可,资源所有者给客户端颁发授权许可(比如授权码code)
  • (C)客户端与授权服务器进行身份认证并出示授权许可(比如授权码code)请求访问令牌。
  • (D)授权服务器验证客户端身份并验证授权许可,若有效则颁发访问令牌(accept token)。
  • (E)客户端从资源服务器请求受保护资源并出示访问令牌(accept token)进行身份验证。
  • (F)资源服务器验证访问令牌(accept token),若有效则满足该请求。

二、OAuth2.0授权模式

OAuth2.0有4种授权模式:

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

三、授权码模式(authorization code)

fang
角色解释:

  • 资源所有者(Resource Owner): 能够许可受保护资源访问权限的实体。当资源所有者是个人时,它作为最终用户被提及。(理解为终端用户)
  • 用户代理(User Agent): 指的的资源拥有者授权的一些渠道。一般指的是浏览器、APP。(理解为浏览器)
  • 客户端(Client): 使用资源所有者的授权代表资源所有者发起对受保护资源的请求的应用程序。术语“客户端”并非特指任何特定的的实现特点(例如:应用程序是否在服务器、台式机或其他设备上执行)。(理解为后端服务器)
  • 授权服务器(Authorization Server): 在成功验证资源所有者且获得授权后颁发访问令牌给客户端的服务器。
    授权服务器和资源服务器之间的交互超出了本规范的范围。授权服务器可以和资源服务器是同一台服务器,也可以是分离的个体。一个授权服务器可以颁发被多个资源服务器接受的访问令牌。(比如 Google、GitHub、微信等三方服务)
  • 资源服务器(Resource Server): 托管受保护资源的服务器,能够接收和响应使用访问令牌对受保护资源的请求。

流程解释:

  • [A] 用户访问客户端,后者将前者导向认证服务器。
  • [B] 用户选择是否给予客户端授权。
  • [C] 假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
  • [D] 客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
  • [E] 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

四、 Google 三方授权码模式代码实现

1. 创建 Google 凭据

在这里插入图片描述

  1. 访问Google Cloud Console,登录Google账户。
  2. 创建新项目:点击“创建项目”,输入项目名称,然后创建项目。
  3. 启用Google+ API:虽然现在Google+不再存在,但你需要找到相应的API(如“Google People API”)来管理用户信息和认证。
  4. 创建OAuth 2.0客户端ID:
  • 导航到“凭据”部分。
  • 点击“创建凭据” > “OAuth客户端ID”。
  • 选择应用类型(例如,“Web应用”),并输入你的应用名称。
  • 添加重定向URI,这应该包括你的应用将在用户授权后接收响应的URL。如果你的应用有多个重定向需求,比如开发环境和生产环境,都需要在这里列出。在这个场景中,你需要添加/google-callback.json作为重定向URI。
  • 获取客户端ID和密钥:创建完客户端ID后,你会获得一个客户端ID和客户端密钥,这些是你在应用中进行Google登录认证时需要使用的凭据。

2. 代码实现

1. 用户点击 Google 登录

在这里插入图片描述
客户端请求服务端获取三方登录地址,服务端返回地址:
https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?scope=openid email profile&include_granted_scopes=true&response_type=code&state=服务端生成唯一code&redirect_uri=https://xxx/google-callback.json&client_id=xxx&flowName=GeneralOAuthFlow&prompt=consent&service=lso&o2v=2&ddm=0

  • state:服务端生成的唯一 state,三方平台回调时会回传,state 可以确定请求用户
  • redirect_uri:三方回调地址,三方平台会在浏览器上302 重定向到这个地址
2. 用户确认授权

在这里插入图片描述

在这里插入图片描述

3. Google 回调

在这里插入图片描述

回调地址:https://xxx/google-callback.json?state=xxx&code=xxx&scope=email+profile+openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&authuser=0&prompt=consent

  • state:服务端生成的唯一 state,Google 回调会原样传回来,用state 可以确定请求用户
  • code:根据 code 可以换取 token
4. 换取 token

根据 code 获取 token

5. 获取用户信息

拿到 token 以后可以获取到用户信息
在这里插入图片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker部署FastDFS整合Springboot

文章目录 1、FastDFS是什么?2、搭建docker环境3、部署fastdfs4、整合springboot5、接口测试参考文章 1、FastDFS是什么? FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文…

网易Filmly网盘影片播放器安卓TV版

我们在观看网盘内的影视时,想要高清/原画质观看视频,甚至倍速功能往往都需要开通网盘会员才可以,否则你只能使用”马赛克”画质观看。 最近网易上线了一款播放器:Filmly ,它支持直连网盘影视资源,可以高速…

栈,ASCII编码

栈 LinkedList stack new LinkedList<>(); int i 0; while (i < s.length()) { char c s.charAt(i); if (c <) {if (stack.isEmpty()) {i;continue;}stack.removeLast(); //从栈的末尾移除一个元素} else {stack.addLast(c); //压入栈的末尾栈是只允许在一端…

JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BO-Transformer-LSTM多变量回归预测&#xff0c;贝叶斯优化Transformer结合LSTM长…

论文翻译 | ITER-RETGEN:利用迭代检索生成协同增强检索增强的大型语言模型

论文地址&#xff1a;Enhancing Retrieval-Augmented Large Language Models with Iterative Retrieval-Generation Synergy 摘要 检索增强生成由于有望解决包括过时知识和幻觉在内的大型语言模型的局限性而引起广泛关注。然而&#xff0c;检索器很难捕捉相关性&#xff0c;尤…

ce学习第一天(例行性工作,chrony服务时间同步,两台服务器免密登录)

1、Linux 的例行性工作 1.1单一执行的例行性工作 at 单一执行的例行性工作&#xff1a;单一执行的例行性工作&#xff1a;仅处理执行一次就结束了&#xff0c;at -> atd 1.1.1 at 命令的实际工作过程 1、我们使用 at 命令来生成所要运行的工作&#xff0c;并将这个工作&a…

从中序与后序遍历序列构造二叉树-二叉树题型

106. 从中序与后序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; right要再left前面 如下如&#xff0c;后序为第一行&#xff0c;最后一个是根&#xff1b; 中序为第二行&#xff0c;中间的为根&#xff1b; 通过后序的最后一个元素从中序中找到根&#xff0…

935.骑士拨号器 - 力扣

935.骑士拨号器 - 力扣 题目链接&#xff1a;935. 骑士拨号器 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;10 解释&#xff1a;我们需要拨一个长度为1的数字&#xff0c;所以把骑士放在10个单元格中…

24/06/26(1.1129)动态内存

strtok 字符串分割函数 #include<stdio.h> int main(){ char str[] "this,a sample string."; char* sep ","; char* pch strtok(str, sep); printf("%s\n", pch); while (pch ! NULL){ printf("%s\…

Power BI 占比函数

1&#xff0c;普通层级结构占比 占比1 DIVIDE([sum_qty], CALCULATE([sum_qty],ALLSELECTED(Item[ITEM_CODE]))) //按照line为一个整理展示数据占比2 SWITCH( true(),ISINSCOPE(Item[ITEM_CODE]),DIVIDE([sum_qty], CALCULATE([sum_qty],ALLSELECTED(Item[ITEM_CODE]))), IS…

说说MQ在你项目中的应用(二)商品支付

看了不少关于MQ的文章&#xff0c;也对MQ的作用做了一些总结。通常来说MQ有三大功能&#xff1a;异步处理、系统解耦和流量削峰。但我觉得这些功能本质上都是围绕着异步这个核心来的&#xff0c;只是针对不同的业务场景做了些调整。 现在市面上常用的MQ中间件&#xff0c;如Ra…

Go语言之函数和方法

个人网站&#xff1a; http://hardyfish.top/ 免费书籍分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-61545511-81795b?p3899 访问密码&#xff1a;3899 免费专栏分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-6…

Java进阶-Lambda

Java进阶-Lambda 前言Lambda表达式什么是Lambda表达式初识Lambda表达式Lambda表达式的简单使用Lambda表达式格式分析与传统接口方法实现的比较 理解Lambda表达式函数式编程非纯函数实例纯函数示例函数式编程在Lambda表达式中的体现 闭包闭包与Lambda表达式的示例 类型推导-匿名…

【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(一)

译注 由于 1.2.2 小节介绍 SVG 的篇幅过多&#xff0c;为了方便查阅&#xff0c;后续将分多个小节依次进行翻译。为了确保整个 1.2.2 小节的完整性&#xff0c;特意将上一篇包含的 SVG 小节的内容整理出来重新编排。敬请留意。 1.2.2 SVG - 可缩放矢量图形 可伸缩矢量图形&…

802.11漫游流程简单解析与笔记_Part2_02_wpa_supplicant、cfg80211、nl80211内核与驱动的关系

wpa、cfg80211、nl80211内核与驱动的关系示意图如下&#xff1a; nl80211和cfg80211都是内核定义的标准接口&#xff0c;目的是规范驱动和应用的统一调用&#xff0c;wpa中常出现nl80211就是通过内核的nl80211接口调用对应cfg80211的部分&#xff0c;进而控制驱动收发数据或切换…

实现高效写入:Schemaless 写入性能优化指南

物联网应用常常需要收集大量的数据&#xff0c;用以支持智能控制、业务分析和设备监控等功能。然而&#xff0c;应用逻辑的更新或硬件的调整可能会导致数据采集项频繁变化&#xff0c;这是时序数据库&#xff08;Time Series Database&#xff0c;TSDB&#xff09;面临的一大挑…

排序算法之java语言实现

零、说在前面 近期打算复习java的几种排序算法&#xff0c;我会将这些排序算法的实现代码、个人心得、时间复杂度分析&#xff0c;算法间的对比做成一个系列帖子&#xff0c;这里作为那些帖子的汇总而存在。 这个系列的框架会包含&#xff1a;概念、实现、时间空间复杂度…

50、基于NARX神经网络的磁悬浮建模(matlab)

1、NARX神经网络简介 NARX&#xff08;非线性自回归外部输入&#xff09;神经网络是一种用于非线性建模和预测的神经网络结构。与传统的自回归模型不同&#xff0c;NARX网络可以接收外部输入来影响输出结果&#xff0c;从而更好地捕捉系统的复杂性和非线性特征。 NARX神经网络…

为什么计算机中的无线网络被称为“Wi-Fi”?

在当今信息化社会中&#xff0c;无线网络已经成为我们生活中不可或缺的一部分。无论是家庭、办公室还是公共场所&#xff0c;我们都能享受到便捷的无线互联网连接。而当我们谈及无线网络时&#xff0c;一个经常听到的术语就是“Wi-Fi”。那么&#xff0c;为什么计算机中的无线网…

植物大战僵尸杂交版v2.1最新整合版,附PC端+安卓端+iOS端安装包+修改器+安装教程!

嘿&#xff0c;大家好&#xff0c;我是阿星&#xff0c;今天要跟大家聊聊一款游戏&#xff0c;它不是那种让人眼花缭乱的大制作&#xff0c;也不是那种能让人回味无穷的艺术作品&#xff0c;但它在阿星心里&#xff0c;绝对是神作中的佼佼者。没错&#xff0c;它就是《植物大战…