【发布时间】:2018-05-06 23:05:58
【问题描述】:
我一直在广泛阅读有关 OAuth 和 OpenID Connect 的内容,但这个问题专门针对 OAuth2 资源所有者密码授予(又名 OAuth2 资源所有者凭据授予,又名 OAuth2 密码授予)
一些资源(例如 Justin Richer 的“OAuth2 in Action”一书)说不要使用 OAuth2 Resource Owner Password Grant 进行身份验证 - 请参阅书中的第 6.1.3 节。
像下面这样的其他优秀资源都表明我们可以使用 OAuth2 资源所有者密码授权来通过受信任的应用对用户进行基本身份验证:
- https://www.oauth.com/oauth2-servers/access-tokens/password-grant/
- https://stormpath.com/blog/the-ultimate-guide-to-mobile-api-security
- https://www.youtube.com/watch?v=FNz0Lupp8HM&index=60&list=PLyUlngzGzkztgTizxM6_zqiw8sRj7vBm0
- https://docs.apigee.com/api-services/content/implementing-password-grant-type
- https://oauth2.thephpleague.com/authorization-server/which-grant/
- https://aaronparecki.com/oauth-2-simplified/#others
但是我很难理解为什么我们不应该使用 OAuth2 资源所有者密码授权作为成功身份验证的基本证明?
我对资源所有者密码授予流程的理解是,最终用户将用户名和密码提供给受信任的客户端(我的本机应用程序),然后将其转发到我的 API 的 OAuth 服务器并将其交换为访问令牌(和可选的刷新令牌),它可以用于其余经过身份验证的 API 端点。原生应用不保存用户名/密码,而是依赖短期访问令牌和长期刷新令牌(在过期时获取新的访问令牌)。
为什么我什至需要 OpenID Connect?为什么我不能只使用 OAuth2 资源所有者密码授予作为身份验证机制?
原生应用和 API 都是由同一个人(我)开发的。
欢迎任何解释。谢谢。
【问题讨论】:
-
您找到问题的答案了吗?我对同样的事情感到困惑。
标签: api security authentication oauth openid-connect