放大未经身份验证的联合SAML登录

时间:2020-05-27 23:25:25

标签: amazon-cognito aws-amplify

所以我不太了解为什么这不起作用。一些背景;我们在用户池中有一个SAML身份提供程序,在我们的身份池中也有一个注册的身份,当我进入仪表板时就会看到它。由于缺少Amplify的中央文档,我感到非常沮丧,很难在网上找到任何东西,而我只是继续尝试我看到的东西,而它们却无法正常工作。

我已经拥有的东西:

我已经从SAML提供者那里获取了一个access_token,并且一切正常。因此,我知道它工作正常(登录部分),但是我遇到的问题基本上是将Amplify更新为现在使用户处于会话状态,因此我们可以利用Amplify中的功能,该功能可让您在令牌到期时刷新令牌。

从本质上讲,这是我正在使用的流程,它来自我在网上找到的不同来源:

await Auth.federatedSignIn({ provider });

这行代码可以是googlefacebook或我们制作的自定义SAML。我已经知道这可行,再次,我已经获得了访问令牌。所以现在,这就是我开始困惑的地方。显然,此处的此函数调用将使用户离开页面,因此我们无法await进行此调用,或者我可以,但是,它不会使用户返回页面重新加载。没关系,这部分很有意义。因此,在加载组件时,我有一个函数可以检查网址哈希中是否有access_token,它也可以正常工作。

现在,问题是,Amplify不知道我们已登录。我们已经“登录”,是的,现在我们已经从URL哈希access_token中获得了有效的JWT令牌,但是本地Amplify不知道该用户已登录。

这就是我在没有文档的情况下谈论的话题,也许我疯了,但我找不到任何地方都可以找到如何处理此问题的中心信息。我认为,一旦有了id_token,也许我们就可以利用Amplify Auth的federatedSignIn,但是现在,他们不仅可以传递提供者,还可以选择发送提供者名称(一个ID令牌) ,以及过期时间和用户对象,如here

所示

如您所见,可以使用不同的方法来使用此函数,因此,我现在确定从响应中返回了id_token,我可以使用此方法告诉Amplify是的,我确实已经登录。

    await Auth.federatedSignIn(
      provider_name,
      {
        token: id_token,
        expires_at: expires_in,
      },
      user
    )

这会触发以下错误:

issue with access token NotAuthorizedException: Invalid login token. Issuer doesn't match providerName

现在,我已100%验证了providerName正确。这是我们在原始federatedSignIn调用中传递的SAME提供程序名称。 id_token也是我们从Cognito和SSO提供者那里获得的jwt id_token。过期时间也是3600,因此我假设那是有效的,如果不是有效的,则错误将有所不同。我只是丢失什么,我需要在这一点上做的。

我如何放大识别联盟登录用户?由于我们得到的只是一个access_token,因此我开始认为自己未正确使用federatedSignIn方法。

0 个答案:

没有答案