-1

背景

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

account.company.com
company.com

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

问题

我看到很少有基于 SPA 的演示项目 identityserver4 演示项目使用额外的角度库(如 angular-auth-oidc-client 和 oidc-client-js)。这些图书馆实际上是client用 id 和 secret 向公众公开这些信息的。

  1. 在浏览器上拥有客户端 ID 和客户端密码是否安全?
  2. 我必须用 Angular 客户端实现 identityserver4\5 吗?也许服务器端client就足够了(所有客户端请求都将传输到服务器端,即 a client)?
4

1 回答 1

0

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

但是您阅读的教程是无意义的,建议使用 client_id/secret auth。不,在 SPA 应用程序中拥有客户端密码并不能保存。

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

在过去的混合流中,它会在来自身份服务器的重定向请求中返回令牌(在登录后并在被重定向回您的网站时),但现在推荐使用这种方法,因为 Auth Code + PKCE 是更安全的方法。

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

于 2021-09-26T11:20:37.913 回答