使用没有 Angular 附加库的 IdentityServer4/5

Posted

技术标签:

【中文标题】使用没有 Angular 附加库的 IdentityServer4/5【英文标题】:Using IdentityServer4/5 without Angular additional libraries 【发布时间】:2021-11-18 21:00:51 【问题描述】:

背景

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

account.company.com
company.com

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

问题

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

oidc-client 已存档,不再受支持。 @Tseng oidc-client 是一个已归档的项目,使用这样的项目安全吗?您对其他维护的项目有什么建议吗? 新的流量不会很快出现。不过,帖子的其余部分仍然使用任何支持 PKCE 的 Auth Code Flow 的库,这是 SPA 应用程序的正确和最安全的流程。我没有使用过其他库,所以我无法告诉您它们支持哪些流。 PKCE 是开放 ID 授权类型/流程的最新成员,并由 oidc-client 支持至少 1-2 年

以上是关于使用没有 Angular 附加库的 IdentityServer4/5的主要内容,如果未能解决你的问题,请参考以下文章

没有 Bootstrap 库的 Angular Formbuilder Select 和 Dropdown

使用 Linux g++ 编译带有附加库的 c++ 程序

如何将 DOM 附加到 Angular 2 组件并仍然获得封装样式

将元素附加到 QueryList Angular

如何附加使用 ivy 下载的库的源代码

启动使用附加库的可执行程序