Получение учетных данных Cognito на Android

victorldavila спросил: 14 ноября 2017 в 07:39 в: java

Мне нужно аутентифицировать пользователя с помощью AWS Cognito в Android и получить маркер для использования в моих будущих запросах. Некоторая информация предоставлена ​​мне бэкэндом, но мне все еще не удалось использовать ее соответствующим образом, и документация Cognito не помогла мне в этом. У меня есть фиксированная информация:

Пул Регион: us-east-1Pool ID: us-east-1: xxxxx-xxxxx-xxxxx-xxxx-xxxxxxxx

И после аутентификации пользователя в конечной точке входа в систему я получаю эту информацию:

{
   "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_"
}

Идентификаторы были опущены, и токен был изменен для сохранения информации. Важно отметить, что идентификатор пула (константа в приложении) и 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 auth:

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);
               }
           }
       }

И вот где я называю это, когда у меня есть информация из моей конечной точки входа в систему (как я показал выше):

public void authenticateCognito(String userId, String token) {
       new CognitoAuthTask().execute(userId, token);
   }

Проблема в том, что это не работает, я получаю эту ошибку здесь:

Неверный токен для входа. Не могу передать токен Cognito. (Сервис: AmazonCognitoIdentity; Код состояния: 400; Код ошибки: NotAuthorizedException; Идентификатор запроса: zzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzz)

Ошибка возникает в задаче в этой строке код здесь:

credentialsProvider.getCredentials();

Бэкэнд-команда упомянула, что мне нужно будет использовать метод GetCredentialsForIdentity, но я не могу найти ничего подобного в Cognito Android SDK.

Любая помощь приветствуется.

0 ответов