SaaS开放平台鉴权,通常使用Oauth鉴权方式,微信开放平台、淘宝开放平台等都采用了这种鉴权方式。下面介绍一下Oauth鉴权的原理以及如何接入。
Oauth(开放授权,Open Authorization)是一个开放标准。
允许第三方应用在用户授权的前提下访问户在服务商(平台)那里存储的各种信息。
而这种授权无需将用户提供用户名和密码提供给该第三方网站。
OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源。
原理图:
Oauth有以下四种授权模式:
• 授权码授权模式(Authorization Code Grant)
• 隐式授权模式(Implicit Grant)
• 密码授权模式(Resource Owner Password Credentials Grant)
• 客户端凭证授权模式(Client Credentials Grant)
http://RO/oauth2/authorize?client_id=&response_type= (GET)
参数名 |
参数说明 |
是否必传 |
参数说明 |
client_id |
应用ID |
是 |
|
response_type |
“code”/“token” |
是 |
|
redirect_uri |
重定向地址 |
是 |
|
scope |
资源范围 |
否 |
如果没有,默认应用的资源范围 |
status |
应用方状态 |
否 |
透传 |
应用的资源范围scope,如果有需要,可以在申请注册应用的时候,由平台方来设定授权的用户资源列表,可以在用户授权的时候供用户来决定是否同意授权,用户可以选择哪些资源授权给第三方应用。
https://AS/oauth2/token?client_id=&client_secret= (POST)
参数名 |
参数说明 |
是否必传 |
参数说明 |
client_id |
应用ID |
是 |
|
client_secret |
应用秘钥 |
是 |
|
redirect_uri |
重定向地址 |
是 |
|
grant_type |
“authorization_code”、“refresh_token” |
是 |
|
code |
授权码 |
是 |
|
refresh_token |
刷新token |
是 |
|
返回结果:JSON
https://RS/oauth2/getResource?access_token= (POST)
参数名 |
参数说明 |
是否必传 |
参数说明 |
access_token |
访问令牌 |
是 |
|
scope |
资源范围 |
否 |
如果没有,默认查询访问令牌的资源范围 |
返回结果:资源信息的JSON数据(涉及敏感数据的加密,一般使用client_secret)
开放平台授权模式通常选用授权码模式,有如下原因:
• Access_token是高度敏感的数据,URL太易于被获取
• 客户端的安全性无法保证,用户账号密码有被截获的风险
Status参数:
• 应用方用户唯一标识的散列值
• 应用方接受到回调地址后,判断当前用户的散列值和Oauth服务器透传回来的散列值是否一致
• 如果不一致,停止继续请求accessToken
status参数也起到了防重放的作用。
资源提供方(平台):
• 对client_id和回调地址做严格校验
• 获取access token的code仅能使用一次,且与授权用户关联
• 尽量避免直接读取当前用户session进行绑定
• 有效使用client_secret参数
资源使用方(三方应用):
• 使用Authorization Code方式进行授权
• 授权过程使用state随机哈希,并在服务端进行判断
• 尽量使用HTTPS保证授权过程的安全性
接入步骤:
1. 在开放平台申请应用,获取应用身份(client_id , client_secret),需要提供应用回调地址,用于接收授权code
2. 生成本地用户的status,并调用申请授权接口,获取授权code
3. 在回调地址接收回传的code和status参数并校验
4. 通过授权码code获取accessToken并保存
5. 通过accessToken获取资源
当用户再次访问,需要Oauth授权时,应用根据保存的accessToken的时间,自行判断是否需要再次授权。
如果不需要用户授权,根据accessToken内的过期时间判断access_token是否过期,没过期直接获取资源;如果已过期,则使用refresh_token刷新accessToken并保存,然后获取资源。
说明:为了安全期间,accessToken需要设置过期时间,通常设置为12或者24小时;refresh_token永久有效,只是重新获取accessToken时自动配对变更。
博主:诸葛本不亮
简介:毕业后做过多年程序猿、架构设计、项目经理、部门总监,待过传统软件公司,也在大型互联网公司负责过平台研发部,在这个行业浸淫十多年,在系统架构、SaaS平台搭建、项目管理以及部门管理等方面有着多年的一线实践经验。
目前与好友合伙创办了一个软件工作室,提供各类系统解决方案、咨询服务及技术合作,企业软件(SaaS平台、企业应用、商城、微信公众号及小程序开发)定制开发服务,大数据服务(数据采集及清洗、数据分析等),以及程序猿职业规划及转型咨询服务(程序猿转架构师、转项目管理、转技术管理等,可以提供相应的一线资料帮助您成功转型,获得大厂offer)。
微信号:danwang2138