Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
aws cognito用户获取id令牌android_Android_Amazon Web Services_Session_Aws Cognito - Fatal编程技术网

aws cognito用户获取id令牌android

aws cognito用户获取id令牌android,android,amazon-web-services,session,aws-cognito,Android,Amazon Web Services,Session,Aws Cognito,我正在尝试获取android中aws cognito的当前登录用户id令牌 我发现这个例子: session.getIdToken().getJWTToken() 其中session是CognitoUserSession对象 在登录调用完成后,我似乎无法找到获取当前cognitousersession的方法 我正在使用notes教程中的默认验证器活动: 它说令牌存储在共享首选项中,但我不知道如何在将来的活动中检索它们,以便我可以使用id令牌调用api网关。由于还没有人应答,这可能会帮助您解决问

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

我发现这个例子: session.getIdToken().getJWTToken() 其中session是CognitoUserSession对象

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

我正在使用notes教程中的默认验证器活动:


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

由于还没有人应答,这可能会帮助您解决问题,请注意这是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();
        }
      });
    });
  }

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

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

如果您仍然想知道如何自己检索令牌,那么可以在
readCachedTokens()
方法中找到代码

android sdk的CurrentUser.getSession进行网络调用以获取令牌,我正试图避免这种情况。我需要一种从共享首选项中检索存储令牌的方法。谢谢donkon,这个链接正是我所需要的。