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

news2024/10/6 6:01:29

一、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 以后可以获取到用户信息
在这里插入图片

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的学生综合测评系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBoot框架 工具:MyEclipse、Tomcat 系统展示 首页 系统首页,提供综合…

吴恩达机器学习作业ex5:正则化线性回归和偏差VS方差(Python实现)详细注释

文章目录 1.正则化线性回归1.1 可视化数据集1.2 正则化线性回归成本函数1.3 正则化线性回归梯度1.4 拟合线性回归 2 偏差-方差2.1 学习曲线 3.多项式回归3.1 学习多项式回归3.2 正则化参数的调整3.3 使用交叉验证集选择 λ3.4 计算测试集误差 1.正则化线性回归 在练习的前半部…

RT-Thread 实时系统介绍

介绍 RT-Thread 是一款开源的实时操作系统,主要面向物联网设备。它支持多种芯片架构,具有安全、低功耗、智能、可伸缩的特性。RT-Thread 拥有超过16年的技术积累,广泛应用于各行业,装机量达数十亿台。它提供了包括设备虚拟文件系…

Python学习打卡:day15

day15 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day15110、数据分析案例步骤 1 —— 文件读取data_define_108.pyfile_define_108.py 111、数据分析案例步骤二——数据计算112、数据分析案例步骤…

医生出诊排班挂号微信小程序系统源码

便捷就医新选择 解决医院门诊快速管理病人资料的问题,微信里可以查看门诊科室和概况​ 🏥 引言:就医新体验 在繁忙的都市生活中,看病就医常常成为我们生活中的一大难题。不过,随着科技的进步,医生出诊排班…

突然断供中国!OpenAI变CloseAI,用户连夜搬家

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 OpenAI,这把变成CloseAI了。 6月25日早上,有中国开发者表示收到了来自OpenAI的“警告信”:将采取额外措施停止其不支持的地区的API(应用接口&#xff09…

LINKAI工作流的建立与调试,用到COW项目的微信机器人上

连接时需要把右边的号连到下一个框的输入,开始与结束是默认的。 可以单独调试模块 可以对模块进行个性化定义 最后进行总流程调试 将这里的code放到config.json文件中 接着又做了一个较复杂的工作流DgPz9wJaoh   QlCc34a8bP 原项目网址: https:/…

JUC 队列

常见的阻塞队列 Queue接口 public interface Queue<E> extends Collection<E> {//添加一个元素&#xff0c;添加成功返回true, 如果队列满了&#xff0c;就会抛出异常boolean add(E e);//添加一个元素&#xff0c;添加成功返回true, 如果队列满了&#xff0c;返回…

记录Gstreamer的uridecodebin可以自动选择硬解码器

记录&#xff1a; uridecodebin3 和uridecodebin优先硬解码 这两个插件&#xff0c;本来是负责动态选择合适的解码器来处理特定的媒体流&#xff0c;使用案例&#xff1a; gst-launch-1.0 uridecodebin urirtsp://192.168.1.120:8554/test ! glimagesink -v gst-launch-1.0 …

Flutter页面状态保留策略

目的: 防止每次点击底部按钮都进行一次页面渲染和网络请求 1. 使用IndexedStack 简单,只需要把被渲染的组件外部套一层IndexedStack即可 缺点: 在应用启动的时候,所有需要保存状态的页面都会直接被渲染,保存起来. 对性能有影响 2. 使用PageController 实现较为复杂,但是不用…

程序员必备的ChatGPT技巧:从代码调试到项目管理

近年来&#xff0c;随着人工智能技术的迅猛发展&#xff0c;ChatGPT作为一种强大的对话式AI工具&#xff0c;已经广泛应用于各个领域。而对于程序员来说&#xff0c;ChatGPT不仅可以帮助他们解决编程中的各种问题&#xff0c;还能在项目管理中发挥重要作用。本篇博客将详细介绍…

电脑高手推荐:三款超实用软件,让你的电脑如虎添翼!

7Zip 7-Zip是一款免费且开源的文件压缩工具&#xff0c;支持多种文件格式&#xff0c;包括其自带的7z格式、ZIP、GZIP、BZIP2和TAR等。该软件由Igor Pavlov于1999年开发&#xff0c;具有高压缩比的特点。7-Zip不仅可以在Windows操作系统上使用&#xff0c;还可以在Unix-like的操…

【嵌入式 RT-Thread】一种优雅的使用 [互斥锁] 和 [信号量] 解决数据多路并发思路

rt-thread 中的信号量和互斥锁在工业开发项目中的应用&#xff0c;本博文主要介绍了一种优雅的使用 [互斥锁] 和 [信号量] 解决数据多路并发思路 2024-06 by 积跬步、至千里 目录 0. 个人简介 && 授权须知1. 工业场景描述1.1 工业数据采集需求1.2 总线协议与数据采集 2…

第 12 课:基于隐语的VisionTransformer框架

基于之前MPC的基础知识&#xff0c;本讲主要内容是MPCViT基于SecretFlow的VisionTransformer框架&#xff0c;主要从神经网络架构&#xff0c;隐私推理框架和实验结果三方面介绍。 一、MPCViT&#xff1a;安全且高效的MPC友好型 Vision Transformer架构 MPCViT隐私推理总体框架…

【LeetCode 274】H指数

1. 题目 2. 分析 这题没啥难度&#xff0c;需要熟练运用Python API。 sort(reverseTrue)可以用于排序List&#xff0c;并且倒序排序。 3. 代码 class Solution:def hIndex(self, citations: List[int]) -> int:citations.sort(reverseTrue)res 0for idx,cite in enume…

vue3-登录小案例(借助ElementPlus+axios)

1.创建一个vue3的项目。 npm create vuelatest 2.引入Elementplus组件库 链接&#xff1a;安装 | Element Plus npm install element-plus --save 在main.js中引入 import ElementPlus from "element-plus";import "element-plus/dist/index.css";ap…

【osgEarth】Ubuntu 22.04 源码编译osgEarth 3.5

下载源代码 git clone --depth1 https://dgithub.xyz/gwaldron/osgearth -b osgearth-3.5 下载子模块 git submodule update --init 如果下载不过来&#xff0c;就手动修改下.git/config文件&#xff0c;将子模块的地址替换成加速地址 (base) yeqiangyeqiang-Default-string…

Puppeteer实战指南:自动化抓取网页中的图片资源

1. Puppeteer 简介 Puppeteer是Google Chrome团队开发的一个Node库&#xff0c;它提供了一个高级API来控制Chrome或Chromium浏览器。Puppeteer可以进行网页自动化操作&#xff0c;包括导航、屏幕截图、生成PDF、捕获网络活动等。 2. 环境搭建 在开始之前&#xff0c;确保你的…

Java中Stream的特性

Stream新特性 被称之为Stream流&#xff0c;用于操作集合或者数组中的数据 优势&#xff1a;Stream流大量的结合了Lambda的语法风格&#xff0c;代码更简洁&#xff0c;可读性更好 使用步骤 先获取数据源&#xff0c;获取Stream流 Collect…

Java常用API基础语法(附带思维导图)

常见的API基本语法 String常用的操作方法 toCharArray equals() equalsIgonreCase substring(0,5) 从0-5的下标开始截取 substring&#xff08;5&#xff09; 从下标为5开始往后截取 replace …