所以,我正在使用 OAuth2 实现一个提供程序。
我得到了客户端申请 client_id 和 client_secret 的部分。这可以向提供商唯一地标识它们。
那么,既然他们已经有了这个,并且正在通过 SSL,为什么还需要授权 token 呢?那么,为什么还需要授权码呢?
另外,为什么要有刷新 token ?
为什么我们不能只使用 client_id 和 client_secret?我确实知道,对于基于最终用户授权保护的资源,需要额外的授权。这很有道理。但为什么需要身份验证 token 和代码?
最后,不受最终用户保护的资源是否需要所有这些?
所以,我想有 5 个不同的问题可以帮助我理解:
- 为什么需要身份验证 token ?
- 为什么需要授权码?
- 为什么需要刷新 token ?
- 为什么不只对不 protected 资源使用客户端凭据(或者我们可以)?
- 为什么两者都是身份验证 token 和代码? (我猜1和2都可以回答这个问题)。
最佳答案
抱歉,我发布了死亡帖子,希望这对将来的人有用。
首先,它们被称为授权代码
和访问 token
。
Access Token
是代表访问权限的字符串 资源Authorization Code
代表资源的授权 业主给予客户。在大多数情况下,资源所有者是 拥有服务器上某些资源的最终用户。客户端 想要访问这些资源,所以他需要授权 用户。刷新 token
用于更新过期的访问 token
。通常,访问 token 的生命周期为几分钟,而刷新会在数月/数年/其他时间后过期。您使用访问权限;当它们变旧时,您可以使用刷新 token 来获取新的访问 token 。 请注意,在 OAuth1 中,只有一种类型的 token 也可以持续数月。引入短期代币是为了提高协议(protocol)安全性。- 我想我没听懂。如果资源不 protected ,就不要使用 OAuth!不管怎样,有Client Credential Grant当您认为客户端是资源所有者时使用 ( here an example 。
- 参见1.和2。它们是不同的,并且可以通过两个不同的 channel 发送(但我还没有找到不同 channel 的用途)。
简而言之,当客户端拥有授权码时,他会对授权服务器 (AS) 说:“呃,资源所有者说我可以访问资源!” AS 给客户端一个访问 token 。现在他有了 token ,客户端将转到资源服务器:“授权服务器说我可以访问资源,查看我的 token ”,然后他就获取了资源。
请注意,有 4 个流程,每个流程都使用不同类型的授权授予,并且其中只有一个是授权代码。一切都与言语有关。 关于机制,首先阅读this (a little obsolete) introduction然后再次阅读RFC 6749 ,记住这些事情。
希望您现在有了更清晰的想法。
关于oauth-2.0 - 尝试了解 OAuth2 流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11573095/