如何将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
EXPERTE
gefragt vor 5 Monaten26 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen