问题描述
我正在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性能等领域达到更广泛的目标。取决于您是否认为值得付出努力。
链接