关于 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

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

目录
相关文章
|
4月前
|
Kubernetes Cloud Native 数据安全/隐私保护
k8s 认证和权限控制
k8s 认证和权限控制
|
8月前
|
存储 安全 API
深入理解OAuth 2.0:授权的标准化之路
在现代的互联网应用中,安全的身份验证和授权是至关重要的。OAuth 2.0作为一个流行的开放标准,用于授权第三方应用访问用户数据,而无需将用户的凭据(用户名和密码)传递给第三方。本文将深入探讨OAuth 2.0的基本概念、工作流程、角色、授权类型,以及如何在实际应用中应用OAuth 2.0来保障应用的安全性和用户隐私。
91 0
|
9月前
|
Python
基于flask-oidc的OIDC协议授权码模式单点登录SSO实现
基于flask-oidc的OIDC协议授权码模式单点登录SSO实现
185 0
|
存储 JSON 安全
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
授权代码授权类型可能是您将遇到的最常见的 OAuth 2.0 授权类型。Web 应用程序和本机应用程序都使用它在用户授权应用程序后获取访问令牌。 这篇文章是我们探索常用的 OAuth 2.0 授权类型系列文章的第一部分。如果您想在深入了解 OAuth 2.0 之前稍微回顾一下并了解更多信息,请查看OAuth 到底是什么?
101 0
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
|
存储 开发框架 安全
快速理解 IdentityServer4 中的认证 & 授权
在实际的生产环境中,存在各种各样的应用程序相互访问,当用户访问 `app` 应用的时候,为了安全性考虑,通常都会要求搭配授权码或者安全令牌服务一并访问,这样可有效地对 `Server` 端的 `API` 资源起到一定程度的有效保护...
387 0
快速理解 IdentityServer4 中的认证 & 授权
|
存储 JSON 前端开发
授权机制OAuth2.0
授权机制OAuth2.0
189 0
|
数据安全/隐私保护
,基于JWT和OAuth2.0应用接入第三方统一认证服务
一套应用服务,有自己的独立登录接口,独立认证服务(JWT认证),独立用户等,需要接入第三方的统一认证系统,实现用户统一登录;
244 0
,基于JWT和OAuth2.0应用接入第三方统一认证服务
|
安全 数据安全/隐私保护
OAuth 2.0授权框架详解
OAuth 2.0授权框架详解
OAuth 2.0授权框架详解
|
XML 安全 C++
认证与授权——单点登录协议盘点:OpenID vs OAuth2 vs SAML
无论是Web端还是移动端,现在第三方应用账户登录已经成为了标配,任意打开个网站都可以看到,QQ/微信账号登录的字样。使用第三方账户的登录的过程,既要限制用户身份只让有效注册用户才能登录,还要根据注册用户的不同身份来控制能浏览的内容,这就需要认证和授权 相关文章链接: OAuth2.
2093 0
|
负载均衡 Kubernetes 容器
统一认证中心 Oauth2 认证坑
统一认证Oauth2的认证完美填坑