【问题标题】:Clarification of OAUTH 2 Grant Types澄清 OAUTH 2 资助类型
【发布时间】:2026-02-15 05:45:01
【问题描述】:

一直在阅读有关 OAUTH2 的内容。

所以...

  • 授权码授予: 适用于希望通过第三方应用程序访问我的应用程序/API 的用户。示例:通过 Flicker 的用户想要访问我的照片打印 API。在这种情况下,Flicker 将使用我的服务器执行所有重定向和 OAUTH2 流。提供了访问令牌,第 3 方应用程序可以根据需要使用 MY API。应用程序开发人员需要注册以获取客户端 ID 和客户端密码。

  • 隐式: 与上述相同,只是移动/应用程序没有后端服务器来保护客户端机密。移动应用程序将处理重定向和 OAUTH2 流。提供了访问令牌,第 3 方应用程序可以根据需要使用 MY API。不支持刷新令牌。应用程序开发人员需要注册以获取客户端 ID。

  • 资源所有者密码凭据授予:在这种情况下,这是我通过典型的 iTunes/Play 商店分发给我的用户的我的移动/网络应用程序。用户严格使用我的应用程序来做他们的日常工作。我的移动/网络应用程序将询问用户用户名/密码并将它们发布到我的后端,在那里它将进行身份验证,然后返回访问令牌。

  • 客户端凭据授予:此案例用于应用程序执行内部机器对机器的操作。即:MY App1 在后端某处访问了 MY App2。

目前我预计不会与第 3 方共享我的 API,我的用户将通过 iTunes/google play 安装我的应用程序。我想 Password Credentials 现在对我有好处。最终,如果我想向世界其他地方开放我的 API,我将不得不实施 Authorisation Code Grant

当我四处搜索这个主题时,我发现了这个链接:https://alexbilbie.com/guide-to-oauth-2-grants/,它有一个很好的决策流程。

【问题讨论】:

  • 您有问题吗?
  • 只是想知道我的假设是否正确......
  • 实际上我是否应该使用 Auth Code Grant,即使它是用于我自己的应用程序的?似乎 OAUTH2 论文建议不要在可能的情况下使用密码凭据。但是如何对用户进行身份验证?

标签: android ios api oauth-2.0


【解决方案1】:

OAuth2 用于将资源的访问权限授权/委托给客户端(第三方应用程序)。

至少有 4 个演员:

  • 授权服务器
  • 客户
  • 资源所有者
  • 资源服务器

应用程序/API 是资源服务器。它存储和管理资源所有者的所有资源。

客户是想要访问这些资源的一方。 授权服务器是通过颁发访问令牌授权客户端访问资源的服务器。

  • 授权代码授予专为机密客户(能够确保其凭据安全)而设计。
  • Implicit Grant 是为公共客户端(非机密客户端)设计的,尤其是脚本语言应用程序 (JS...)
  • 资源所有者密码凭据授予适用于任何类型的客户端,但假定客户端知道资源的密码凭据。通常,此授权类型仅专用于受信任的客户。
  • 客户端凭据授予允许客户端访问自己的资源(在这种情况下,资源所有者是客户端)。

应避免使用 Resource Owner Password Credentials Grant,但它对于遗留应用程序仍然是一个很好的解决方案,并且如果 client 之间存在信任关系, 授权服务器资源服务器

【讨论】: