OAuth 2.0 "Implicit Flow" 比 "Resource Owner Password" 有何优势?

How is OAuth 2.0 "Implicit Flow" better than "Resource Owner Password"?

我刚刚开始使用 IdentityServer4 并通过不同的教程和文章按照自己的方式工作。

我了解不同的架构有不同的流程。我主要构建单页应用程序(Angular)。据我所知,我基本上有两个选项来验证然后授权:

我看的所有地方都说隐式流会更好(在某一方面)。

这是为什么?

我将是 API 和 SPA 的产品负责人。

隐式流比资源所有者密码更好的原因有几个:

  1. /token 端点应该需要客户端机密,而单页应用程序 (SPA) 无法保证其机密安全。
  2. 用户通常比使用它的应用程序更信任 OAuth2 服务器。使用资源所有者密码流程时,您的应用程序会读取用户名和密码,因此用户可能不愿意输入。
  3. 您的应用程序可能存在安全问题,这些问题会将密码暴露给攻击者 - 不必要的风险。
  4. 使用资源所有者密码流程,很难实现多种不同的身份验证方法。使用隐式流程,免费获得。

也许其他人会添加其他我没有想到的原因。

除了 Ján 提出的要点之外,值得注意的是,如果您使用资源所有者密码流程,您将不会获得 SSO。如果您使用隐式流,Identity Server 可以像任何网站一样存储用户,而使用 Resource Owner Password,您无法查看用户之前是否已通过 Identity Server 的另一项服务进行身份验证。