我有一些关于假设环境中的 OAuth 流程的问题。让我们想象一下以下情况:我们有一个 JavaScript 客户端(React JS)、一个 Keycloak 服务器和一个 REST API(Spring Boot)。我们使用 Keycloak 通过 JWT 来识别用户。经过身份验证后,我们希望为用户提供将其 Google 日历链接到其帐户的能力。因此,有必要将用户 ID(存在于 Keycloak JWT 主题中)与 Google 访问令牌相关联。
除了使用 Google API 的“state”参数之外,我很难找到实现这种关联的最佳方法。下面是代表我设想的流程的序列图。
您能否确认此流程是否遵循最佳实践?它安全且通用吗?还有其他方法可以实现这种关联吗?
提前感谢您的帮助和建议。
更标准的选项是始终通过 Keycloak 管理身份验证,并将其配置为使用这些用户通过 Google 登录:
您的 JS 客户端运行代码流到 Keycloak
Keycloak 为您运行第二个到 Google 的代码流,并包含日历范围
登录完成后,Keycloak 应该能够使用
embedded token
方法:
然后,您的 JS 客户端使用访问令牌调用您的 API。您的 API 可以获取内部令牌并使用它调用 Google API(CORS 限制将阻止 JS 客户端直接调用 Google API)。
我还没有用 Keycloak 端到端验证这一点,但这是一种目标模式。授权服务器(如 Keycloak)可以管理应用程序的许多连接,这有助于降低复杂性。