选择 oauth2 flow spa 应用程序

问题描述

我们正在构建一个全栈应用程序,其中包含一个 SPA 客户端 (reactjs) 和一个在 API Rest 中发布资源的 nodejs 服务器。

我需要使用身份提供商(如 azuread 或 keycloack)对用户进行身份验证。

我想使用 OpenIdConnect 协议(基于 Oauth2),但我不知道我需要哪个流。

我读到带有 PKCE 的授权代码最适合 SPA,但我不明白为什么? 如果我获得了 access_token,我可以将它保存在我的 SPA 中的什么位置?保存这个令牌安全吗?

您为该架构推荐哪种流程?

解决方法

使用 OAuth 2.1,它非常简单。

只有两种流程可供选择:

  1. 当您有用户参与时,PKCE 的授权代码。
  2. ClientCredentials 流,当您在没有用户参与的情况下进行机器对机器的通信时。

不再推荐所有其他流程。

如果您不想在 SPA 应用程序内部处理令牌,那么您可以让后端为您处理所有这些,如下图所示:

enter image description here

在 SPA 和后端之间,您只有一个经典的 cookie 会话。