关于 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简化登录。多因素认证增强安全性。开发者需平衡安全与体验,保护用户隐私。
710 0
|
域名解析 监控 算法
阿里云拨测:主动探测Web应用质量,助力提升用户体验
阿里云拨测是一种针对互联网应用(Web页面、网络链路等)进行应用性能和用户体验监测的服务,无需嵌码即可为云上用户提供开箱即用的企业级主动拨测式应用监测解决方案。
8538 104
阿里云拨测:主动探测Web应用质量,助力提升用户体验
|
NoSQL Redis
SSO单点登录核心原理
SSO单点登录核心原理
485 0
|
NoSQL 大数据 分布式数据库
|
存储 算法 定位技术
每个系统都在用的appid、appkey、appsecret都是什么意思?
每个系统都在用的appid、appkey、appsecret都是什么意思?
13472 0
|
网络架构
路由表学习笔记(一):如何查看路由表和操作路由表
查看和操作路由表的笔记,包括使用route print命令查看路由表信息,以及使用ROUTE命令添加、删除或修改路由表项的方法。
3371 0
路由表学习笔记(一):如何查看路由表和操作路由表
|
数据安全/隐私保护
OAuth 2.0身份验证及授权
8月更文挑战第24天
849 0
|
运维 网络协议 调度
docker swarm 集群服务编排部署指南(docker stack)
docker swarm 集群服务编排部署指南(docker stack)
1916 0