首页 > 解决方案 > 放大 (JavaScript) - SAML 登录

问题描述

我在 Amplify 中使用 AD SAML 登录苦苦挣扎了几天。

我看过一些教程,但我想要的流程不同。我没有任何按钮可以让用户单击以触发 Auth 序列(并打开弹出窗口)。

我们的用户正在进入一个链接:

https://....amazoncognito.com/login?response_type=token&client_id=...&redirect_uri=...

这会自动将它们重定向到前端。

http://localhost:3000/#access_token=...&id_token=...&token_type=Bearer&expires_in=600

我可以从查询参数中获取access_tokenid_token和。token_typeexpires_in

我可以使用这些令牌成功调用我们的后端..

但我正在努力的是制作 Amplify “登录”序列..所以它会识别用户并创建 localStorage 值..所以例如在调用Auth.currentSession()它时会返回令牌。

我试过使用Auth.federatedSignIn(..)但无济于事。我什至不确定它是否支持这个流程。

这是我尝试过的:

Auth.federatedSignIn(
    'test-ad',
    {
        token: idToken,
        expires_at: expiresIn,
    },
    {
        name: "test-user",
    },
);

但我不断得到

未处理的拒绝 (NotAuthorizedException):登录令牌无效。发行者与 providerName 不匹配

这很奇怪,因为providerName我正在传递('test-ad')与我在 Cognito SAMLProvider Name字段中配置的相同(在 Cognito -> 用户池 -> 联合 -> 身份提供者 -> SAML -> 新提供者中)

我的 Amplify 配置正确

Amplify.configure({
   Auth: {
      identityPoolId: ...,
      region: ...,
      userPoolId: ...,
      userPoolWebClientId: ...
   }
});

我可以看到 Chromenetwork调用具有正确的有效负载:

{
   "IdentityPoolId":"us-east-x:...",
   "Logins":{
      "test-ad":"...idToken..."
   }
}

所以 - 如何使用令牌验证到 Amplify?有可能吗?

任何帮助将不胜感激!

标签: javascriptauthenticationamazon-cognitosamlaws-amplify

解决方案


推荐阅读