oauth-2.0 - 尝试了解 OAuth2 流程

标签 oauth-2.0

所以,我正在使用 OAuth2 实现一个提供程序。

我得到了客户端申请 client_id 和 client_secret 的部分。这可以向提供商唯一地标识它们。

那么,既然他们已经有了这个,并且正在通过 SSL,为什么还需要授权 token 呢?那么,为什么还需要授权码呢?

另外,为什么要有刷新 token ?

为什么我们不能只使用 client_id 和 client_secret?我确实知道,对于基于最终用户授权保护的资源,需要额外的授权。这很有道理。但为什么需要身份验证 token 和代码?

最后,不受最终用户保护的资源是否需要所有这些?

所以,我想有 5 个不同的问题可以帮助我理解:

  1. 为什么需要身份验证 token ?
  2. 为什么需要授权码?
  3. 为什么需要刷新 token ?
  4. 为什么不只对不 protected 资源使用客户端凭据(或者我们可以)?
  5. 为什么两者都是身份验证 token 和代码? (我猜1和2都可以回答这个问题)。

最佳答案

抱歉,我发布了死亡帖子,希望这对将来的人有用。

首先,它们被称为授权代码访问 token

  1. Access Token 是代表访问权限的字符串 资源
  2. Authorization Code 代表资源的授权 业主给予客户。在大多数情况下,资源所有者是 拥有服务器上某些资源的最终用户。客户端 想要访问这些资源,所以他需要授权 用户。
  3. 刷新 token 用于更新过期的访问 token 。通常,访问 token 的生命周期为几分钟,而刷新会在数月/数年/其他时间后过期。您使用访问权限;当它们变旧时,您可以使用刷新 token 来获取新的访问 token 。 请注意,在 OAuth1 中,只有一种类型的 token 也可以持续数月。引入短期代币是为了提高协议(protocol)安全性。
  4. 我想我没听懂。如果资源不 protected ,就不要使用 OAuth!不管怎样,有Client Credential Grant当您认为客户端资源所有者时使用 ( here an example
  5. 参见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/

相关文章:

amazon-web-services - Cognito 访问 token "cognito:groups"丢失

java - 如何从没有浏览器的服务器访问 Google Drive 文档

oauth - 重定向后关闭 OAuth 2.0 弹出窗口

swift - 完美的 Swift 中的 OAuth 2.0 服务器提供程序

android - 如何授予对关联/辅助 Google 帐户的访问权限

asp.net-mvc - 用于 OpenID Connect 的 OWIN 中间件 - 代码流(流类型 - AuthorizationCode)文档?

oauth-2.0 - Instagram API : how can I have multiple redirect_uris for a single app?

ios - 如何从 iOS 调用 OAuth 2.0 API

java - 如何在Webflux功能端点中访问OAuth2AuthorizedClient?

authentication - JWT 为什么我们需要承载字?