【发布时间】:2018-09-06 12:14:19
【问题描述】:
考虑多服务设置,其中单个授权服务器 (AS) 管理对多个资源服务器 (RS) 的访问,在此示例中为 RS1 和 RS2。
如果我们对两个 RS 都有一个访问令牌,并且我们向 RS1 发送一个访问令牌,那么 RS1 将能够使用此访问令牌向 RS2 进行调用。这是我希望避免的安全威胁,尤其是在并非每个资源服务器都值得信赖的环境中。
rfc6819 提到了这个威胁和解决方案:
多服务环境中的授权服务器可以考虑 向不同的资源服务器发布具有不同内容的令牌 并在令牌中明确指出目标服务器 令牌旨在发送。
但是,我是 OAuth2 的新手,并且很难理解如何实现这一点。我知道 OAuth2 中有 scope 和 audience 概念,但我没有看到不同的授权流程如何为不同的资源服务器颁发不同的访问令牌。
为简单起见,我们采用Resource Owner Password Credentials Grant
客户端执行登录以获取刷新令牌和访问令牌
GET /token
?grant_type=password
&username=user
&password=pass
&scope=rs1 rs2
AS 回应:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
}
这里的 access_token 参数是必需的,如 RFC 所述。但它应该是什么访问令牌?一个用于 RS1 还是一个用于 RS2?如何获取其他需要的访问令牌?我应该使用刷新令牌吗?
也许 RFC 没有考虑这个用例。是否有任何最佳或常见做法来防止将访问令牌从一个 RS 泄漏到另一个 RS?
【问题讨论】:
标签: oauth-2.0