OAuth2 密码授予与 OpenID Connect

Kon*_*tin 6 security authentication api oauth openid-connect

我一直在广泛阅读有关 OAuth 和 OpenID Connect 的信息,但这个问题特别是关于 OAuth2 资源所有者密码授予(又名 OAuth2 资源所有者凭据授予,又名 OAuth2 密码授予)

一些资源(例如 Justin Richer 的“OAuth2 in Action”一书)说不要使用 OAuth2 Resource Owner Password Grant 进行身份验证- 请参阅本书中的第 6.1.3 节。

其他像下面这样的好资源都说我们可以使用 OAuth2 Resource Owner Password Grant 通过受信任的应用程序对用户进行本质上的身份验证

  1. https://www.oauth.com/oauth2-servers/access-tokens/password-grant/
  2. https://stormpath.com/blog/the-ultimate-guide-to-mobile-api-security
  3. https://www.youtube.com/watch?v=FNz0Lupp8HM&index=60&list=PLyUlngzGzkztgTizxM6_zqiw8sRj7vBm0
  4. https://docs.apigee.com/api-services/content/implementing-password-grant-type
  5. https://oauth2.thephpleague.com/authorization-server/which-grant/
  6. https://aaronparecki.com/oauth-2-simplified/#others

但是我很难理解为什么我们不应该使用 OAuth2 资源所有者密码授予作为成功身份验证的基本证明?

我对资源所有者密码授予流程的理解是,用户名和密码由最终用户提供给受信任的客户端(我的本机应用程序),然后将其转发到我的 API 的 OAuth 服务器并将其交换为访问令牌(以及可选的刷新令牌),它可以用于其他经过身份验证的 API 端点。本机应用程序不保存用户名/密码,而是依赖于短期访问令牌和长期刷新令牌(以在它们到期时获取新的访问令牌)。

为什么我什至需要 OpenID Connect?为什么我不能只使用 OAuth2 资源所有者密码授予作为身份验证机制?

本机应用程序和 API 都是由同一个人(我)开发的。

欢迎任何解释。谢谢你。

jwi*_*eke -1

无论授权类型如何,OAuth 2.0都不是身份验证协议

OpenID Connect 是构建在 OAuth 2.0 之上的身份验证协议

以下是一些参考资料(其中一些来自编写 OAuth 2.0 和/或 OpenID Connect 的人员):