如何将Amazon Cognito与Azure AD实现联合身份认证并且让用户可以在Amplify实现的登录页面里SSO

0

【以下的问题经过翻译处理】 客户正在进行迁移。其中一步是将Amazon Cognito与Azure AD(保存所有用户的地方)连接,并在后台办公应用程序中使用SSO功能,该应用程序使用Vue.js和Amplify实现。

总的来说,Azure AD,SAML,Cognito User Pool(联合身份验证)已经正确实现,并且使用 Cognito 托管的 UI 交换用户。问题是客户没有使用托管UI,而是使用 Amplify 实现了自己的登录页面,并与 Cognito 连接。当用户尝试使用自定义页面登录时,SSO 不会触发(Cognito 不会访问 IdP)。控制台中可见的响应是400用户不存在。

问题是:

  • 如何使用 Amplify 正确实现这个流程?
  • Amplify/Vue.js 中应使用哪些端点和参数才能正确触发此流程?

欢迎提供任何指导和补充材料!

profile picture
专家
已提问 5 个月前21 查看次数
1 回答
0

【以下的回答经过翻译处理】 没有查看您的前端代码,很难确定您使用了哪些Amplify SDK调用来启动联合登录流程。基本上,如果您运行浏览器网络跟踪,Amplify应该会对Cognito User Pool触发一个/authorize调用来触发登录流程。为了从Amplify中执行此操作,通常会调用Auth.federatedSignIn() API调用。当然,这要求Amplify配置正确设置,其中身份提供者的名称、Cognito应用客户端ID、重定向URI都正确设置。

通常,我会使用OIDC/SAML支持的idP初始化Amplify的“oauth”配置,如下所示:

// AWS SDK & AWS Amplity Configuration
AWS.config.region = config.AWS_REGION;
Amplify.configure({
  Auth: {
    identityPoolId: config.AWS_COGNITO_IDENTITY_POOL_ID, // OPTIONAL - Amazon Cognito Identity Pool ID
    region: config.AWS_REGION, // REQUIRED - Amazon Cognito Region
    userPoolId: config.AWS_COGNITO_USER_POOL_ID, // REQUIRED - Amazon Cognito User Pool ID
    userPoolWebClientId: config.AWS_COGNITO_CLIENT_ID, // OPTIONAL - Amazon Cognito Web Client ID
    oauth: {
      domain: config.AWS_COGNITO_CLIENT_DOMAIN_NAME,
      scope: config.AWS_COGNITO_IDP_OAUTH_CLAIMS,
      redirectSignIn: config.AWS_COGNITO_IDP_SIGNIN_URL,
      redirectSignOut: config.AWS_COGNITO_IDP_SIGNOUT_URL,
      responseType: config.AWS_COGNITO_IDP_GRANT_FLOW
    }
  }
});

然后您可以按以下方式调用基于idP的联合登录,其中提供者的名称与您在Cognito User Pool中配置的名称相匹配。

const { Auth } = Amplify;
// invoke amplify federated signin
Auth.federatedSignIn({
   provider: config.AWS_COGNITO_IDP_NAME
});

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则