在没有 Angular 附加库的情况下使用 IdentityServer4/5

Using IdentityServer4/5 without Angular additional libraries

背景

我检查了将我的服务认证系统迁移到 identityserver4 的选项。我有两个网站:

account.company.com
company.com

我的网站是基于 .NET 核心和 Angular 的 SPA。

问题

我看到很少有基于 SPA 的演示项目 identityserver4 演示项目使用额外的 angular 库(如 angular-auth-oidc-client 和 oidc-client-js)。这些库实际上是 client,具有 ID 和秘密,将此信息公开给 public。

  1. 在浏览器上设置客户端 ID 和客户端密码安全吗?
  2. 我必须用 Angular 客户端实现 identityserver4 吗?也许服务器端client就够了(所有的客户端请求都会被传送到服务器端,也就是一个client)?

如果你 运行 SPA 你,你最好的选择是 oidc-client

但是你读过的教程都是废话,建议client_id/secret auth。不,在 SPA 应用程序中拥有客户端机密是不省事的。

因此,您拥有授权码 + PKCE 流程。 AuthCode + PKCE(密钥代码交换证明)的工作方式类似于授权代码流程(client_id + 秘密 + 获取令牌的代码),但秘密是根据请求生成的(参见 here)。这解决了拥有静态秘密的问题并防止重放攻击。

在过去的混合流程中,这将 return 来自身份服务器的重定向请求中的令牌(登录后以及被重定向回您的网站时),但这是作为 Auth 的推荐方法代码 + PKCE 是更安全的方法。

您不能在 SPA 中使用基于后端的代码流,因为后端不知道凭据并且要求用户直接输入凭据而不是将它们重定向到身份服务器不太安全(并且由于您的应用程序必须实际看到凭据,因此可信度较低)比交互流(将您重定向到身份服务器登录页面)