【发布时间】:2018-01-29 01:50:39
【问题描述】:
我刚刚开始使用 IdentityServer4,并且正在学习不同的教程和文章。
我了解不同架构有不同的流程。我主要构建单页应用程序(使用 Angular)。据我了解,我基本上有两种选择来进行身份验证然后授权:
- 隐式流
- 资源所有者密码(仅调用令牌端点)
我看到的每一个地方都说隐式流程会更好(在一个方面或另一方面)。
这是为什么呢?
我将成为 API 和 SPA 的产品所有者。
【问题讨论】:
我刚刚开始使用 IdentityServer4,并且正在学习不同的教程和文章。
我了解不同架构有不同的流程。我主要构建单页应用程序(使用 Angular)。据我了解,我基本上有两种选择来进行身份验证然后授权:
我看到的每一个地方都说隐式流程会更好(在一个方面或另一方面)。
这是为什么呢?
我将成为 API 和 SPA 的产品所有者。
【问题讨论】:
隐式流比资源所有者密码更好的原因有几个:
/token 端点应该需要客户端密码,而单页应用程序 (SPA) 无法保证其密码安全。也许其他人会添加我没想到的其他原因。
【讨论】:
token 端点。但在 SPA 中,您必须在浏览器中保密,这意味着您的 SPA 的所有用户都可以看到。
RequireClientSecret=false,因此您不必严格维护(不安全的)客户端机密。正如您所说,SPA(或者实际上是安装在最终用户计算机上的 任何 客户端)秘密很难/不可能保密,那么为什么要麻烦呢?将 RequireClientSecret 设置为 false 并接受授权来自用户凭据而不是客户端的事实。
token 端点是否支持 SPA 所需的 CORS 标头。
RequireClientSecret 是Client 设置,您显然可以为不同的应用程序定义不同的客户端——一些使用客户端机密无法保密的流程,而另一些则需要它.至于 CORS,是的,它是可能的 - 这只是整个 IdSvr 应用程序的 ConfigureServices 的一部分,而不是特定于使用身份服务器库。像往常一样,只需定义您将接受来自(即 SPA 的主机)的呼叫的来源
除了 Ján 提出的要点之外,值得注意的是,如果您使用资源所有者密码流,您将不会获得 SSO。如果您使用隐式流程,Identity Server 可以像任何网站一样存储用户,而使用资源所有者密码,您无法查看用户之前是否已通过 Identity Server 对其他服务进行身份验证。
【讨论】: