问题描述
我们正在构建一个全栈应用程序,其中包含一个 SPA 客户端 (reactjs) 和一个在 API Rest 中发布资源的 nodejs 服务器。
我需要使用身份提供商(如 azuread 或 keycloack)对用户进行身份验证。
我想使用 OpenIdConnect 协议(基于 Oauth2),但我不知道我需要哪个流。
我读到带有 PKCE 的授权代码最适合 SPA,但我不明白为什么?
如果我获得了 access_token,我可以将它保存在我的 SPA 中的什么位置?保存这个令牌安全吗?
您为该架构推荐哪种流程?
解决方法
使用 OAuth 2.1,它非常简单。
只有两种流程可供选择:
- 当您有用户参与时,PKCE 的授权代码。
- ClientCredentials 流,当您在没有用户参与的情况下进行机器对机器的通信时。
不再推荐所有其他流程。
如果您不想在 SPA 应用程序内部处理令牌,那么您可以让后端为您处理所有这些,如下图所示:
在 SPA 和后端之间,您只有一个经典的 cookie 会话。