用oidc-client和client secret反应SPA

问题描述

我正在ASP.NET Core API之上构建React SPA,我想通过OIDC进行身份验证。授予类型是授权码,客户端确实具有客户端密码

由于我们将使用客户机密,因此涉及机密的授权步骤必须经过我们控制的代理。

这在具有oidc-client的React SPA中可行吗?

解决方法

如果秘密存在于客户端中,则不是秘密。 :)

秘密用于服务器-服务器身份验证,因为秘密在服务器上是安全的(无论如何,我们希望如此),并且授予访问权限的API拥有被授予使用该秘密的访问者的消费者白名单。

对于SPA,如果您正在谈论允许应用使用API​​ ,那么我相信您仅限于使用CORS白名单。如果您谈论的是用户通过客户端访问API,那么您正在查看访问代码和用户名/密码。

,

问题

您在身份验证系统,可用性或将安全性提高到可接受的级别方面遇到阻止问题。您的情况不支持PKCE。

代理解决方案

使用oidc-client,它将添加PKCE参数,并且您的SPA安全性支持最新标准。

在授权代码授予和刷新令牌授予消息期间,客户端机密将发挥作用。

可以在服务器端对消息进行调整,以删除PKCE并改用客户端密钥。不过,这是一个非常复杂的解决方案,并非所有人都喜欢。

它需要由网络域发布的SameSite cookie。就我而言,我使用了在CloudFront内容交付网络中运行的AWS lambda edge功能。

为什么要这样做?

为了适应SPA架构并在可用性,编码模型,移动集成和全局Web性能等领域达到更广泛的目标。取决于您是否认为值得付出努力。

链接