我有一个带有Express服务器的Angular应用程序,Okta充当IdP。这已经设置好并且运行良好。现在,我需要从使用Amazon Cognito的外部应用程序支持SSO。他们通过为我们提供clientId和Secret来启用我们的OAuth2 Auth代码流应用程序。
我想了解的是,我应该在哪里用AccessToken交换authCode,以及我应该如何为在Okta中通过SSO来的用户管理会话。我有几个选择:
>
我尝试在angular应用程序中使用“angular-oauth2-oidc”库,但在使用AWS Cognito调用/授权endpoint时遇到了CORS问题。此外,在前端通道中用accessToken交换authCode似乎不是最安全的方式。
对于SSO用户,我可以在express中编写一个新的路由处理程序来管理令牌交换,并将此路由作为对Cognito的初始授权调用中的回调url。然而,我的express服务器已经使用了“express stormpath”sdk,它处理Okta充当IdP的常见情况下的会话管理。如何让express使用Cognito IdP在同一位置管理本地Okta用户会话和SSO用户会话。
我也尝试过建立Okta联盟到外部IdP。但是,我不确定如何将授权呼叫路由到外部IdP,而Okta本身充当我们内部用户的IdP。
我更倾向于3,在3中,我只与Okta交谈,它负责管理内部用户(Okta IdP)的身份验证,以及来自外部IdP(Cognito)的SSO用户。
任何帮助在这里将不胜感激...
谢谢,RK
这是一个非常多的问题,但这里有一些提示:
1a.您需要将SPA的域作为受信任的源添加到Okta,如我撰写的步骤7所示
1b。当你说“不安全”时,你需要更明确地表达你的担忧和你的意思。
如果您只想将Okta作为SPA集成,请尝试运行我的初始代码示例。
2a.你需要根据自己的目标制定一个策略。我个人对SPA最佳整体架构的看法总结在下面的博客文章中,但这里有很多需要了解的地方,有些人可能会有不同的看法:
2b。如果您正在构建一个SPA,您可能应该避免使用旧的web后端会话管理功能,尽管有些人会使用它们。
3a。我同意你的看法,这是首选方案。目标是构建您的应用程序,使其使用来自一个提供商的令牌,而不考虑登录方法。
3b。当您重定向到Okta时,您需要执行以下操作之一:
联盟屏幕截图
我快速浏览了一下,我并不是说这很容易,甚至是不可能的,因为遇到供应商限制是很常见的。但是,这是该技术应该如何工作。这种复杂性最好存在于授权服务器中,而不是存在于应用程序代码中。
在Cognito中创建一个OAuth客户端:
然后从如下URL获取Cognito的元数据:
然后填写Okta需要的endpoint:
这将生成IDP值并为您提供重定向URL:
然后在 Cognito 中输入生成的值,以完成配置: