1

前言

OAuth 是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。OAuth机制保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。

令牌与密码

1.令牌具有时效性, 到期会自动失效,用户自己无法修改;密码一般长期有效,用户不修改就不会变。
2.令牌具有即刻性,即数据所有者可以随时撤销,一旦撤销立即失效。
3.令牌有权限范围,密码则一般具备完整权限。

四种授权方式

  • 授权码(authorization-code)
第三方应用先申请一个授权码,然后再用该码获取令牌。
安全性最高,适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。

image.png

(1) A网站跳转 B网站
`https://b.com/oauth/authorize?
response_type=code&
client_id=CLIENT_ID&
redirect_uri=CALLBACK_URL&
scope=read`
(2) B网站就会跳回redirect_uri参数指定的网址
https://a.com/callback?code=A...
(3) A后端向 B网站请求令牌
https://b.com/oauth/token?
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET&
grant_type=authorization_code&
code=AUTHORIZATION_CODE&
redirect_uri=CALLBACK_URL
  • 隐藏式(implicit)
令牌储存在前端,没有后端。

image.png

(1) 跳转到 B 网站
https://b.com/oauth/authorize?
response_type=token&
client_id=CLIENT_ID&
redirect_uri=CALLBACK_URL&
scope=read
(2) 返回令牌
https://a.com/callback#token=...
  • 密码式(password)
适用于其他授权方式都无法采用的情况,而且必须是用户高度信任的应用。
https://oauth.b.com/token?gra...
username=USERNAME&
password=PASSWORD&
client_id=CLIENT_ID
  • 凭证式
适用于没有前端的命令行应用,即在命令行下请求令牌。
https://oauth.b.com/token?
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET

归雀楼
135 声望8 粉丝

励志远航


引用和评论

0 条评论