1

我正在使用 Amazon 的 Cognito 用户池来启动 SAML SSO 身份验证。我使用aws-amplify的是一个 JavaScript 库,用于使用云服务和前端的 ReactJS 进行应用程序开发。currentSession()尝试使用该功能似乎存在一些问题。Auth.siginIn()使用包的Auth Module的功能时,我的会话似乎没有保存会话。我已经使用我在用户池中设置的当前测试用户进行了测试并成功登录。我想使用的原因Auth.currentSession()功能是验证我的应用程序中每个视图的会话。下面你可以看到,在用户验证登录后,我将它们发送到我的仪表板视图,然后在组件安装后尝试验证会话,但它返回一个错误,没有找到用户。下面是我使用的代码。我查看了 aws-amplify 在其网站上的文档,但似乎无法确定问题所在。

注意:Redux 用于存储来自 setUserData 和 setAuthToken 的响应(登录后的会话响应)

登录.js

  handleSubmit = (event) => {
    event.preventDefault();
    Auth.signIn(this.state.sso, this.state.password)
    .then((res) => {
      this.props.authUser(true)
      this.props.setUserData(res.username)
      this.props.setAuthToken(res.Session)
    })
    .then(() => {
      this.props.history.push("/Dashboard")
    })
    //catches err
    .catch((e) => {
      console.log(e);
      alert(e.message)
      this.props.authUser(false)
    })
  }

用户登录后,应将用户推送到仪表板。一旦componentDidMount()在组件生命周期中被调用,那么我想检查当前会话以查看是否仍在会话中。

仪表板.js

componentDidMount(){
    debugger;
    console.log(Auth);
    Auth.currentSession().then((res) => {
      console.log(res);
    }).catch((e) => {
      alert(e)
    })


    this.props.toggleError(false);
    this.props.toggleNotify()
  }
4

1 回答 1

1

SAML 的身份验证流程与在 UserPool 中创建的用户不同。Auth.signIn()仅用于对已在用户池中创建的用户进行身份验证。(AWS Amplify 文档

要启动 SAML 身份验证流程,请执行以下步骤:

  1. 在 UserPool 中将 SAML 提供者设置为联合身份
  2. 将用户引导至您的 AWS UserPool 托管的 SAML SSO 页面。
  3. 用户将通过 SAML SSO 提供程序进行身份验证,您的UserPool将向您的应用程序发送 JWT
  4. 使用 AWS-AmplifyAuth.federatedSignIn()方法接收 AWS IAM 凭证(将由 AWS-Amlify 管理

本指南是步骤 1-3 的重要资源:Amazon Cognito 用户池支持与 SAML 联合

对于第 4 步:

Auth.federatedSignIn(
    // Initiate federated sign-in with your User Pool  
    'cognito-idp.us-west-2.amazonaws.com/us-west-2_XXXXXXXXX',
    { 
        // the JWT token parsed from the response url
        token: #id_token
    },
    // (optional) a user object (a simple dictionary created from the #access_token)
    user
).then(() => {
    // ...
});
于 2018-07-14T04:14:28.147 回答