SaaS开放平台安全鉴权方式: Oauth鉴权机制及接入说明

版权声明:本文为博主原创文章,转载需注明出处。 https://blog.csdn.net/david_pfw/article/details/82964421

SaaS开放平台鉴权,通常使用Oauth鉴权方式,微信开放平台、淘宝开放平台等都采用了这种鉴权方式。下面介绍一下Oauth鉴权的原理以及如何接入。

1. Oauth是什么

Oauth(开放授权,Open Authorization)是一个开放标准。

允许第三应用用户授权的前提下访问户在服务商(平台)那里存储的各种信息。

而这种授权无需将用户提供用户名和密码提供给该第三方网站。

OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源。

原理图:

Oauth有以下四种授权模式:

• 授权码授权模式(Authorization Code Grant

• 隐式授权模式(Implicit Grant

• 密码授权模式(Resource Owner Password Credentials Grant

• 客户端凭证授权模式(Client Credentials Grant

2. OAuth2.0的接口组成

2.1 Oauth抽象协议流程

2.2 Oauth2.0接口组成

2.2.1 请求授权接口

http://RO/oauth2/authorize?client_id=&response_type=    GET

参数名

参数说明

是否必传

参数说明

client_id

应用ID

 

response_type

“code”/“token”

 

redirect_uri

重定向地址

 

scope

资源范围

如果没有,默认应用的资源范围

status

应用方状态

透传

应用的资源范围scope,如果有需要,可以在申请注册应用的时候,由平台方来设定授权的用户资源列表,可以在用户授权的时候供用户来决定是否同意授权,用户可以选择哪些资源授权给第三方应用。

2.2.2 请求token

https://AS/oauth2/token?client_id=&client_secret=    POST

参数名

参数说明

是否必传

参数说明

client_id

应用ID

 

client_secret

应用秘钥

 

redirect_uri

重定向地址

 

grant_type

authorization_coderefresh_token

 

code

授权码

 

refresh_token

刷新token

 

返回结果:JSON

2.2.3 请求资源

https://RS/oauth2/getResource?access_token=    POST

参数名

参数说明

是否必传

参数说明

access_token

访问令牌

 

scope

资源范围

如果没有,默认查询访问令牌的资源范围

返回结果:资源信息的JSON数据(涉及敏感数据的加密,一般使用client_secret

3. Oauth的安全机制

开放平台授权模式通常选用授权码模式,有如下原因:

• Access_token是高度敏感的数据,URL太易于被获取

• 客户端的安全性无法保证,用户账号密码有被截获的风险

Status参数:

• 应用方用户唯一标识的散列值

• 应用方接受到回调地址后,判断当前用户的散列值和Oauth服务器透传回来的散列值是否一致

• 如果不一致,停止继续请求accessToken

status参数也起到了防重放的作用。

资源提供方(平台)

• client_id和回调地址做严格校验 

• 获取access tokencode仅能使用一次,且与授权用户关联

• 尽量避免直接读取当前用户session进行绑定 

• 有效使用client_secret参数

资源使用方(三方应用):

• 使用Authorization Code方式进行授权 

• 授权过程使用state随机哈希,并在服务端进行判断 

• 尽量使用HTTPS保证授权过程的安全性 

4. 如何接入Oauth?

接入步骤:

1. 在开放平台申请应用,获取应用身份(client_id , client_secret),需要提供应用回调地址,用于接收授权code

2. 生成本地用户的status,并调用申请授权接口,获取授权code

3. 在回调地址接收回传的codestatus参数并校验

4. 通过授权码code获取accessToken并保存

5. 通过accessToken获取资源

当用户再次访问,需要Oauth授权时,应用根据保存的accessToken的时间,自行判断是否需要再次授权。

如果不需要用户授权,根据accessToken内的过期时间判断access_token是否过期,没过期直接获取资源;如果已过期,则使用refresh_token刷新accessToken并保存,然后获取资源。

说明:为了安全期间,accessToken需要设置过期时间,通常设置为12或者24小时;refresh_token永久有效,只是重新获取accessToken时自动配对变更。


如果您觉得博主写的文章对您有帮助,可以请博主喝杯茶哦,O(∩_∩)O~

博主:诸葛本不亮

简介:毕业后做过多年程序猿、架构设计、项目经理、部门总监,待过传统软件公司,也在大型互联网公司负责过平台研发部,在这个行业浸淫十多年,在系统架构、SaaS平台搭建、项目管理以及部门管理等方面有着多年的一线实践经验。

目前与好友合伙创办了一个软件工作室,提供各类系统解决方案、咨询服务及技术合作,企业软件(SaaS平台、企业应用、商城、微信公众号及小程序开发)定制开发服务,大数据服务(数据采集及清洗、数据分析等),以及程序猿职业规划及转型咨询服务(程序猿转架构师、转项目管理、转技术管理等,可以提供相应的一线资料帮助您成功转型,获得大厂offer)。

微信号:danwang2138

 

猜你喜欢

转载自blog.csdn.net/david_pfw/article/details/82964421