AWS Amplify 与托管 Cognito UI 的联合 Okta 身份验证

Posted

技术标签:

【中文标题】AWS Amplify 与托管 Cognito UI 的联合 Okta 身份验证【英文标题】:AWS Amplify federated Okta authentication with hosted Cognito UI 【发布时间】:2021-02-28 05:47:39 【问题描述】:

我正在尝试更新现有的 React Amplify 应用程序,该应用程序使用 AWS Cognito 用户池进行身份验证,以也使用通过 SAML 集成的 Okta SSO 进行身份验证。 Cognito 是根据these instructions 配置的,我很确定一切都配置正确,因为当我使用 Cognito 控制台中的“启动托管 UI”按钮时,我会看到带有 Okta 和 Cognito 用户名/密码面板的正确登录对话框并且可以使用其中任何一个进行身份验证。

虽然在 React 中使用 Authenticator 组件调用时,我无法显示相同的面板,我认为这是因为我没有正确设置 federated 参数,但我能找到的唯一文档是用于配置 Google、Facebook 或 Auth0,而不是 Okta。

我得到的错误是:

Unhandled Rejection (TypeError): Cannot read property 'oauthSignIn' of undefined

并且代码设置如下(但我尝试了许多排列但没有运气):

const federatedInfo = 
    oauth_config: 
        domain: 'xxx.auth.us-east-1.amazoncognito.com',
        clientID: 'zzz',
        redirectUri: 'http://localhost:3000/',
        audience: 'urn:amazon:cognito:sp:us-east-yyy',
        responseType: 'token', //'token id_token', // for now we only support implicit grant flow
        scope: 'openid email',
        returnTo: 'http://localhost:3000/'
    
;


   <Authenticator
        ...props
        theme=AmplifyTheme
        federated=federatedInfo
        hideDefault=true
        signUpConfig=authConfig.signUpConfig
        onStateChange=(state, data) => 
            setAuthData(authState: state, user: data);
        
        children=[<Greetings/>, <SignIn federated=federatedInfo/>, <ConfirmSignIn/>, <VerifyContact/>, <ForgotPassword/>, <RequireNewPassword/>]
    />;

关于如何让它工作的任何提示?

【问题讨论】:

【参考方案1】:

我不完全关注你,因为我不使用 Amplify,但值得检查你是否知道可以使用授权端点?

https://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html

即您可以使用这种格式创建静态链接

https://[您的 cognito 身份验证域]/oauth2/authorize?redirect_uri=[您的回调 url]&response_type=token&client_id=[您的客户端 id]&identity_provider=[您的身份提供商]

【讨论】:

感谢您的提示。这基本上是我在问题中提到的“启动托管 UI”按钮创建的 URL。这很好用,但由于基于应用程序的Authenticator 组件配置不正确,它会强制用户通过第二个非联合身份验证流程。我想我可能已经弄清楚了,并会在更多测试后发布答案。【参考方案2】:

我们最终通过直接调用 Auth.federatedSignIn() 解决了这个问题,条件是 Auth 配置中存在 oath.domain,并且仅使用 Authenticator 组件进行本地 Cognito 用户名/密码登录。

不是很优雅,但至少它可以工作。可悲的是,亚马逊对这整个领域的记录不足。

【讨论】:

你能扩展一下吗?我也有同样的情况。你如何处理重定向?

以上是关于AWS Amplify 与托管 Cognito UI 的联合 Okta 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

将 Cognito 中的用户信息与 AWS Amplify GraphQL 关联

将Cognito的用户信息与AWS Amplify GraphQL关联起来。

使用 AWS Amplify 和 AWS Cognito 进行数据特定授权

AWS Amplify 和 amazon-cognito-identity-js 的区别?

链接到 Cognito 用户池的 AWS Amplify GraphQL 架构

Flutter 与 AWS 的集成(有和没有 Amplify)