关于 OAuth 2.0 统一认证授权

简介: 随着互联网的巨头大佬逐渐积累了海量的用户与数据,用户的需求越来越多样化,为了满足用户在不同平台活动的需求,平台级的厂商则需要以接口的形式开放给第三方开发者,这样满足了用户的多样性需求,也可以让自己获得利益,让数据流动起来,形成给一个良性的生态环境,最终达到用户、平台商、第三方开发者共赢。

image.png

原文作者:UC 国际研发 子逍

背景

随着互联网的巨头大佬逐渐积累了海量的用户与数据,用户的需求越来越多样化,为了满足用户在不同平台活动的需求,平台级的厂商则需要以接口的形式开放给第三方开发者,这样满足了用户的多样性需求,也可以让自己获得利益,让数据流动起来,形成给一个良性的生态环境,最终达到用户、平台商、第三方开发者共赢。

OAuth 思路

OAuth协议(详情见官网http://oauth.net)是为用户资源的授权方位提供一个安全、开放的标准,OAuth协议并不需要接触用户的账号信息,即账号密码,就可以完成第三方对用户信息访问的授权(http://zh.wikipedia.org/wiki/OAuth

整体思路

image.png

OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(authorization layer)。用户同意发起是否第三方授权,"客户端"拿到用户的命令后,去"服务提供商"申请授权,登录授权层以后,"服务提供商"根据令牌的权限范围和有效期,向"客户端"开放一定范围的资料。

OAuth 授权过程

1、角色涵盖
首先要先知道几个角色:普通用户(Consumer),客户端(ISV第三方应用),平台商(Platform提供服务资源或者认证服务器)

2、整体授权流程

image.png

(1)用户先对(客户端)ISV的应用进行访问,用户发起请求

(2)ISV接受到请求之后,导向平台商请求request token,并且带上其中的申请的appId

(3)平台验证appid后,返回一个request token,这个token是有效时间的,用于请求令牌

(4)ISV应用引导用户进入授权页面,并带上需要调转的回调链接,appid

(5)用户在platform平台商页面上输入密码账号,直接登录platform授权

(6)platform通过第三方ISV提供的回调链接,回调返回access token

(7)第三方ISV拿到access token,取到用户授权的数据,进行加工返回用户,授权完成。

OAuth 授权模式

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

授权码模式(authorization code)

这里主要说下授权码模式,它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动。

(A)用户访问客户端,客户端将用户导向平台商。

1、客户端给平台商发起的请求:
image.png

  • response_type:表示授权类型,必选项,此处的值固定为"code"
  • appId:表示客户端的ID,必选项
  • redirect_uri:表示重定向URI,可选项
  • scope:表示申请的权限范围,可选项
  • state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。

(B)客户端引导用户授权, 平台商根据URI返回授权码

  • code:表示授权码,必选项。该码的有效期应该很短,通常设为10分钟,客户端只能使用该码一次,否则会被授权服务器拒绝。该码与客户端ID和重定向URI,是一一对应关系。
  • state:如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。

(C)客户端引导平台商登录页面,该页面附上早先的"重定向URI"+授权码+appid,请求令牌(需要用户登录)

image.png

(D)如果用户登录,平台服务商将用户导向客户端事先指定的URI,登录授权

(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端的重定向URI发送访问令牌(access token)和更新令牌(refresh token)。

image.png

简化模式(implicit grant type)

不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

主要访问:

image.png

用户授权后返回access token

image.png

密码模式(Resource Owner Password Credentials Grant)

用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。

image.png

用户授权后返回 access token。

客户端模式(Client Credentials Grant)

指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题。
image.png

认证服务器必须以某种方式,验证客户端身份。

更新令牌

如果用户访问的时候,客户端的"访问令牌"已经过期,则需要使用"更新令牌"申请一个新的访问令牌。

客户端发出更新令牌的HTTP请求,包含以下参数:

  • granttype:表示使用的授权模式,此处的值固定为"refreshtoken",必选项。
  • refresh_token:表示早前收到的更新令牌,必选项。
  • scope:表示申请的授权范围,不可以超出上一次申请的范围,如果省略该参数,则表示与上一次一致。

image.png

参考文档:(阿里淘宝)大型分布式网站架构设计与实践 陈康贤

目录
相关文章
|
存储 安全 API
深入了解OAuth 2.0:探究身份验证与授权的新标准
OAuth 2.0是一种开放标准的协议,用于安全地授权第三方应用程序访问用户的资源,而无需共享用户的凭据。这一协议在互联网上广泛应用,为许多应用和服务提供了强大的身份验证和授权机制。本文将深入介绍OAuth 2.0,探讨其工作原理、关键概念和常见用途。
|
存储 安全 数据安全/隐私保护
讲解移动应用中的用户认证和授权。
【4月更文挑战第1天】移动应用开发重在用户认证和授权,确保安全和体验。认证涉及用户名密码、短信验证码、第三方登录和生物特征,其中生物特征安全便捷但受限于硬件。授权管理通过角色或细粒度权限控制用户操作。OAuth用于第三方授权,SSO简化登录。多因素认证增强安全性。开发者需平衡安全与体验,保护用户隐私。
880 0
|
域名解析 监控 算法
阿里云拨测:主动探测Web应用质量,助力提升用户体验
阿里云拨测是一种针对互联网应用(Web页面、网络链路等)进行应用性能和用户体验监测的服务,无需嵌码即可为云上用户提供开箱即用的企业级主动拨测式应用监测解决方案。
8792 111
阿里云拨测:主动探测Web应用质量,助力提升用户体验
|
存储 Linux 虚拟化
开源虚拟化平台oVirt4.3简单搭建实践(下)
开源虚拟化平台oVirt4.3简单搭建实践(下)
2042 0
开源虚拟化平台oVirt4.3简单搭建实践(下)
|
存储 安全 JavaScript
【分布式技术专题】「授权认证体系」深度解析OAuth2.0协议的原理和流程框架实现指南(授权流程和模式)
在传统的客户端-服务器身份验证模式中,客户端请求服务器上访问受限的资源(受保护的资源)时,需要使用资源所有者的凭据在服务器上进行身份验证。资源所有者为了给第三方应用提供受限资源的访问权限,需要与第三方共享它的凭据。这就导致一些问题和局限:
1166 2
【分布式技术专题】「授权认证体系」深度解析OAuth2.0协议的原理和流程框架实现指南(授权流程和模式)
|
6月前
|
弹性计算 编解码 NoSQL
从入门到精通!阿里云服务器ECS实例规格族机型分类,一文讲透不踩雷
本文系统解析阿里云ECS实例规格族命名规则(如g9i、c8a、u1等),详解通用型、计算型、内存型、高主频型、ARM架构u1及弹性裸金属等6大类适用场景,并提供5大避坑指南与快速选型表,助你精准选型、降本增效。
|
9月前
|
人工智能 运维 专有云
持续领先!阿里云入选2025年Gartner®分布式混合基础设施魔力象限
近日,Gartner发布2025年《分布式混合基础设施魔力象限》报告,在混合云场景下,阿里云凭借飞天企业版(Apsara Stack)、边缘云ENS和云盒CloudBox产品组合能力,在“执行能力”和“愿景完整性”两大维度分别处于亚太厂商中最高最远的位置。
716 6
|
9月前
|
人工智能 数据可视化 数据库连接
保姆级教程 | 0代码,用n8n一键打通微信、钉钉与数据库,效率提升500%
n8n是一款开源可视化自动化工具,无需编程即可连接微信、钉钉、数据库等400+服务。通过拖拽节点搭建工作流,实现数据同步、消息通知等自动化,效率提升500%。支持免费私有部署,安全可控,零成本开启高效办公新体验。
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
多模态大模型:跨越感官边界的智能革命
多模态大模型能同时处理文本、图像、音频等信息,实现跨模态理解与生成。它如同“全科博士”,综合多源数据进行推理,在人机交互、内容创作等领域展现强大能力,推动AI迈向更通用的智能新纪元。
|
消息中间件 数据可视化 Kafka
docker arm架构部署kafka要点
本内容介绍了基于 Docker 的容器化解决方案,包含以下部分: 1. **Docker 容器管理**:通过 Portainer 可视化管理工具实现对主节点和代理节点的统一管理。 2. **Kafka 可视化工具**:部署 Kafka-UI 以图形化方式监控和管理 Kafka 集群,支持动态配置功能, 3. **Kafka 安装与配置**:基于 Bitnami Kafka 镜像,提供完整的 Kafka 集群配置示例,涵盖 KRaft 模式、性能调优参数及数据持久化设置,适用于高可用生产环境。 以上方案适合 ARM64 架构,为用户提供了一站式的容器化管理和消息队列解决方案。
1191 10