【问题标题】:aws cognito user get id token androidaws cognito 用户获取 id 令牌 android
【发布时间】:2020-07-08 14:27:52
【问题描述】:

我正在尝试为 android 中的 aws cognito 获取当前登录用户的 id 令牌。

我找到了这个例子: session.getIdToken().getJWTToken() 其中 session 是 CognitoUserSession 对象

在进行登录调用后,我似乎无法找到获取当前 cognitousersession 的方法。

我正在使用笔记教程中的默认身份验证器活动: https://docs.aws.amazon.com/aws-mobile/latest/developerguide/tutorial-android-aws-mobile-notes-auth.html

它说令牌存储在共享首选项中,但我不知道如何在未来的活动中检索它们,以便我可以使用 id 令牌调用 api 网关。

【问题讨论】:

    标签: android amazon-web-services session aws-cognito


    【解决方案1】:

    当令牌没有/不会过期时,AWS Android SDK 将在没有网络调用的情况下返回 JWT 令牌。

    可以使用CognitoIdentityProviderClientConfig.setRefreshThreshold(long) 方法设置令牌何时刷新的阈值。

    如果您仍然好奇如何自己检索令牌,那么代码可以在readCachedTokens() 方法中找到 https://github.com/aws/aws-sdk-android/blob/master/aws-android-sdk-cognitoidentityprovider/src/main/java/com/amazonaws/mobileconnectors/cognitoidentityprovider/CognitoUser.java#L2116

    【讨论】:

    • 谢谢 donkon,那个链接正是我需要的。
    【解决方案2】:

    由于还没有人回答,这可能会对您有所帮助,请注意这是 JS 代码

    这是我从已登录用户那里接收会话的例行程序。 之后,我就可以访问令牌了。

      var user_data = {
        UserPoolId: AWSConfiguration.UserPoolId,
        ClientId: AWSConfiguration.ClientAppId
      };
    
      var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(user_data);
    
      if (userPool.getCurrentUser() != null) {
        userPool.getCurrentUser().getSession(function (err, session) {
          if (err) {
            window.location.href = "login.html";
          }
          var user_params = {
            IdentityPoolId: AWSConfiguration.IdPoolId,
            Logins: {
              'cognito-idp.eu-central-1.amazonaws.com/eu-central-1_XXX':session.idToken.jwtToken
            }
          };
          AWS.config.credentials = new AWS.CognitoIdentityCredentials(user_params);
          AWS.config.region = AWSConfiguration.region;
    
          AWS.config.credentials.refresh((error) => {
            if (error) {
              console.error(error);
            } 
            else {
              user_is_authenticated();
            }
          });
        });
      }
    

    【讨论】:

    • android sdk 的 CurrentUser.getSession 进行网络调用以获取令牌,这是我试图避免的。我需要一种从共享首选项中检索存储令牌的方法。
    猜你喜欢
    • 2019-07-28
    • 2019-03-23
    • 2023-03-25
    • 2021-10-15
    • 2017-11-22
    • 1970-01-01
    • 2018-01-23
    • 2016-10-22
    • 2020-11-20
    相关资源
    最近更新 更多