Lay*_*yke 14 security oauth-2.0
我正在阅读OAuth2规范:
https://tools.ietf.org/html/rfc6749#section-4.4.2
特别是关于client_credentials授权类型的部分.
如果访问令牌请求有效且已获得授权,则
授权服务器将按照第5.1节中的说明发出访问令牌.
刷新令牌不应该包括在内. 如果请求未通过客户端身份验证或无效,则授权服务器将返回错误响应,如第5.2节中所述.
一个成功的响应示例:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"example_parameter":"example_value"
}
Run Code Online (Sandbox Code Playgroud)
`
我有点困惑为什么授权服务器可以为passwordgrant类型返回refresh_tokens 但是没有client_credentials.
我猜这与refresh_token可以交换access_token这一事实有关,因为client_credentials授权类型不需要用户名和密码,如果你的应用程序密钥和refresh_token被泄露,则撤销变得很多更加困难?
Mvd*_*vdD 21
使用客户端凭据授予时,客户端应用程序使用其客户端ID和客户端密钥向授权服务器进行身份验证.如果获得授权,它将获取资源的访问令牌.在这种情况下没有用户交互,因此不需要发出刷新令牌.
当访问令牌到期时,客户端可以使用其自己的凭据来请求新令牌.当客户端想要代表用户访问资源时(当时可能不与客户端交互),将使用刷新令牌.
在这种情况下,客户代表自己行事.
在应用资源所有者密码凭据授权时,返回刷新令牌是有意义的,这样客户端就不需要存储或缓存资源所有者的密码 - 最初由资源所有者以交互方式提供 - 以获得新访问权限令牌.
在客户端凭据流中,客户端的凭据无论如何都是以离线方式从存储中提供的 - 因此刷新令牌不再获得任何安全性或可用性优势,而不仅仅是再次使用客户端凭证(客户端可以访问这些凭据)无论如何)获得一个新的访问令牌.
理解这一点的关键部分是,该refresh概念并不是为您刷新任何已有的访问令牌而设计的。
如果您的应用程序正在使用最终用户用户名/密码身份验证(即代表特定最终用户),则“刷新令牌”只是跳过最终用户干预并仍然重新获得新访问令牌的一种方法。(如果我是设计师,则可以将“刷新令牌”命名为“ bypass-user-intervention token”,因此无需询问当前问题。)
但是,如果您的应用程序使用客户端凭据进行身份验证,则它是代表自己的行为,您完全不需要用户干预,服务器也不需要(也不会)提供刷新令牌。
| 归档时间: |
|
| 查看次数: |
6527 次 |
| 最近记录: |