带有外部 IdP 的 Okta oauth2

Okta oauth2 with external IdP

我有一个带有快速服务器的 Angular 应用程序,其中 Okta 充当 IdP。这已经设置并且运行良好。现在,我需要从使用 Amazon Cognito 的外部应用程序支持 SSO。他们通过向我们提供 clientId 和 Secret,为我们的应用程序启用了 OAuth2 身份验证代码流。

我想了解的是我应该在哪里交换 authCode 和 accessTokens,以及我应该如何管理通过 Okta 中的 SSO 访问的用户的会话。我有几个选择:

  1. 我尝试在 angular 应用程序中使用“angular-oauth2-oidc”库,但在使用 AWS Cognito 调用 /authorize 端点时 运行 遇到 CORS 问题.此外,似乎在前端通道中将 authCode 与 accessToken 交换可能不是最安全的方式。

  2. 对于 SSO 用户,我可以在 express 中编写一个新的路由处理程序来管理令牌交换,并在对 Cognito 的初始授权调用中将此路由作为回调 url。但是,我的快速服务器已经使用“express-stormpath”sdk,它为我们通常使用 Okta 充当 IdP 的情况处理会话管理。我如何在同一个地方快速管理本地 Okta 用户会话以及使用 Cognito IdP 的 SSO 用户会话。

  3. 我还尝试设置 Okta 联合到外部 IdP。但是,我不确定如何将身份验证调用路由到外部 IdP,而 Okta 本身充当我们内部用户的 IdP。

我更倾向于 3,我只与 Okta 交谈,它负责管理我们内部用户 (Okta IdP) 以及来自外部 IdP (Cognito) 的 SSO 用户的身份验证。

如有任何帮助,我们将不胜感激..

谢谢, RK

一个问题太多了,但这里有一些建议:

1a。您需要将 SPA 的域作为可信来源添加到 Okta,如 step 7 of my write up

1b。当你说 'not the safe way'.

时,你需要更明确地表达你的担忧和你的意思

如果您只想将 Okta 作为 SPA 集成,请尝试 运行ning 我的 initial code sample

2a。你需要根据你的目标制定一个策略。我个人对 SPA 最佳整体架构的看法总结在我下面的博客文章中,但这里有很多需要理解的地方,有些人可能有不同的看法:

2b。如果您正在构建 SPA,您可能应该避免使用较旧的 Web 后端会话管理功能,尽管有些人使用它们。

3a。我同意你的看法,这是首选。旨在构建您的应用程序,以便它使用来自一个提供商的令牌,而不管登录方法如何。

3b。当您重定向到 Okta 时,您需要执行以下操作之一:

  • 在构建授权请求时向 Cognito 发行者 ID 发送 idp parameter
  • 配置 Okta 以提示用户输入登录方法,以便 Okta 或 Cognito 可以用作身份提供者。在 Okta 中配置 idp 连接后,默认情况下可能会发生这种情况。

联邦屏幕截图

我快速浏览了一下,我并不是说这很容易,甚至可能,因为 运行 进入供应商限制是很常见的。但是,这就是该技术应该如何工作的方式。这种复杂性存在于授权服务器中比存在于您的应用程序代码中更好。

在 Cognito 中创建一个 OAuth 客户端:

然后从 URL 中获取 Cognito 的元数据,例如:

然后填写Okta需要的端点:

这将生成 IDP 值并为您提供重定向 URL:

然后在Cognito中输入生成的值,完成配置: