Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.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
Java 在Android上获取Cognito凭据_Java_Android_Amazon Web Services_Amazon Cognito_Aws Cognito - Fatal编程技术网

Java 在Android上获取Cognito凭据

Java 在Android上获取Cognito凭据,java,android,amazon-web-services,amazon-cognito,aws-cognito,Java,Android,Amazon Web Services,Amazon Cognito,Aws Cognito,我需要在Android中使用AWS的Cognito对一个用户进行身份验证,并获得一个令牌用于我未来的请求。一些信息是由后端提供给我的,但我仍然没有以适当的方式使用它,Cognito的文档在这方面对我没有帮助。我有以下固定信息: 游泳池区域:us-east-1 池ID:us-east-1:xxxxx-xxxxx-xxxxx-xxxxx 在登录端点上对用户进行身份验证后,我得到以下信息: { "cognitoId": "us-east-1:yyyy-yyyy-yyyy-yyyy-yyyyyyy

我需要在Android中使用AWS的Cognito对一个用户进行身份验证,并获得一个令牌用于我未来的请求。一些信息是由后端提供给我的,但我仍然没有以适当的方式使用它,Cognito的文档在这方面对我没有帮助。我有以下固定信息:

游泳池区域:us-east-1 池ID:us-east-1:xxxxx-xxxxx-xxxxx-xxxxx

在登录端点上对用户进行身份验证后,我得到以下信息:

{
   "cognitoId": "us-east-1:yyyy-yyyy-yyyy-yyyy-yyyyyyy",
   "cognitoToken": "hH1Q8bCLh9-pamP6DCrC0-KY4rNtZ115xDedE224CeEanex-CCWh4tWUtJjPc_tU3d6eJ_7Uk23ceTNhCFYT1qnAL_7kAH_lHod4a1GQo29FuTLQSqx4lOFv2Ev3RvYcCzjyLEAA1-EIKBtfSm_YN9y6DHBOzDJ8owLJTxB0JEWvsWfATjug4P8hxCI97RVB2cetrmq4JvZr__bCziUb-7AifPvy4VMW3xLjJ7uyDvogwcx5gJ1rF8Z38_z7kREB1R_CYPRVQuoHzag0j9RoOTNeAYFGO42qgCewTl3Lvm5PUbTIGhCIp6y1RVWAPLEdMWmQ3LVpqJcZKLQRhMmEzOGMyTUiXSwiaXNzIjoiaHR0cHM6Ly9jb2duaXRvLWlkZW50aXR5LmFtYXpvbmF3cy5jb20iLCJleHAiOjE1MTE2NDEzMDksImlhdCI6MTUxMTYyNjkwOX0.QFWGxh_"
}
省略了ID,并更改了令牌以保留信息。需要注意的是,池ID(应用程序中的常量)和cognitoId(后端返回)是不同的

我有一个静态凭据提供程序,初始化如下:

credentialsProvider = new CognitoCachingCredentialsProvider(
               getApplicationContext(),    /* get the context for the application */
               IDENTITY_POOL_ID,    /* Identity Pool ID */
               Regions.US_EAST_1           /* Region for your identity pool--US_EAST_1 or EU_WEST_1*/
       );
这是试图获取Cognito认证的任务:

private static final class CognitoAuthTask extends AsyncTask<String, Void, String> {
           @Override
           protected String doInBackground(String... strings) {
               String userId = strings[0];
               String token = strings[1];
               String sessionToken = null;
               try {
                   Map<String, String> logins = new HashMap<String, String>();
                   logins.put(userId, token);
                   credentialsProvider.setLogins(logins);
                   AWSSessionCredentials credentials = credentialsProvider.getCredentials();
                   sessionToken = credentials.getSessionToken();
               } catch (Exception e) {
                   if (BuildConfig.DEBUG) {
                       e.printStackTrace();
                   }
               } finally {
                   return sessionToken;
               }
           }

           @Override
           protected void onPostExecute(String authToken) {
               super.onPostExecute(authToken);
               cognitoAuthToken = authToken;
               if (BuildConfig.DEBUG) {
                   Log.d("Cognito Token", cognitoAuthToken == null ? "null" : cognitoAuthToken);
               }
           }
       }
问题是这不起作用,我在这里得到了这个错误:

无效的登录令牌。无法传入Cognito标记。(服务: AmazonCongnitoIdentity;状态代码:400;错误代码: NotAuthorizedException;请求ID:zzzzzz-zzzz-zzzz-zzzz-zzzzzz)

错误发生在任务上,在下面这行代码上:

credentialsProvider.getCredentials();
后端团队提到我需要使用GetCredentialsForIdentity方法,但在Cognoto Android SDK上找不到类似的方法


非常感谢您的帮助。

您应该使用的类是,实现
GetCredentialsForIdentity
API的类。

credentialsProvider.getCredentials()时时,内部
amazoncgnitoidentityclient
调用GetCredentialsForIdentity以从Cognito获取新凭据。
如果提供的令牌已过期,则服务将返回
无效登录令牌
错误。

您是否可以对此进行详细说明?我正在尝试类似的东西,这个类似乎已经被弃用了。谢谢你的回答,这个类似乎确实是要使用的。你能帮助我理解如何将我已经掌握的信息传递给这个类并以正确的方式使用它吗?
credentialsProvider.getCredentials();