#android #authentication #postman #credentials #amplify
#Android #аутентификация #почтальон #учетные данные #aws-усиление
Вопрос:
я настроил приложение для Android для использования усиления аутентификации.
я разрешил ему принимать неавторизованных (гостевых) пользователей и федеративный вход в Google.
кажется, все работает так, как ожидалось. я могу войти в систему, используя Google sign in и cognito.
у меня возникла проблема с использованием временных учетных данных, сгенерированных для входа в Google и гостевого пользователя.
я настроил api в apigateway (пример pet, импортированный в мой apigateway). я могу получить доступ к конечной точке с помощью пользователя с политикой, разрешающей вызывать api. я тестирую в postman, используя users accessKey и SecretKey, и это работает.
это также работает, когда я использую идентификатор пользователя, вошедшего в систему cognito.
(я добавил разрешить вызов api в политики ролей авторизации и авторизации для используемого пула удостоверений)
если я использую ключ доступа и секретный ключ, сгенерированные для гостя с помощью этого кода:
public void getGuestCredentials(View view) {
Log.i(TAG, "inside getGuestCredentials()...");
Amplify.Auth.fetchAuthSession(
result -> {
AWSCognitoAuthSession cognitoAuthSession = (AWSCognitoAuthSession) resu<
Log.i(TAG, "Is user signed in: " cognitoAuthSession.isSignedIn());
switch(cognitoAuthSession.getIdentityId().getType()) {
case SUCCESS:
Log.i(TAG, "success IdentityId: " cognitoAuthSession.getIdentityId().getValue());
Log.i(TAG, "success access key: " cognitoAuthSession.getAWSCredentials().getValue().getAWSAccessKeyId());
Log.i(TAG, "success secret key: " cognitoAuthSession.getAWSCredentials().getValue().getAWSSecretKey());
break;
case FAILURE:
Log.i(TAG, "failure IdentityId not present because: " cognitoAuthSession.getIdentityId().getError().toString());
break;
default:
Log.i(TAG, "default IdentityId: " cognitoAuthSession.getIdentityId().getValue());
Log.i(TAG, "default access key: " cognitoAuthSession.getAWSCredentials().getValue().getAWSAccessKeyId());
Log.i(TAG, "default secret key: " cognitoAuthSession.getAWSCredentials().getValue().getAWSSecretKey());
break;
}
},
error -> Log.i("AuthQuickStart", error.toString())
);
Я получаю:
«сообщение»: «Маркер безопасности, включенный в запрос, недействителен».
в postman.
то же самое с ключами, сгенерированными для входа в Google с использованием этого кода:
// sign in as federated user using google token (using escape hatch)
AWSMobileClient mobileClient = (AWSMobileClient) Amplify.Auth.getPlugin("awsCognitoAuthPlugin").getEscapeHatch();
// mobileClient.federatedSignIn(IdentityProvider.GOOGLE.toString(), account.getIdToken(), новый обратный вызов() {
mobileClient.federatedSignIn(«accounts.google.com «, account.getIdToken(), новый обратный вызов() {
@Override
public void onResult(final UserStateDetails userStateDetails) {
//Handle the result
Log.i(TAG, "mobileClient login result: " userStateDetails.getUserState().toString());
Log.i(TAG, "success google federation, going to authenticated user page.... ");
// ************************************************
AWSCredentials credentials = mobileClient.getCredentials();
Log.i(TAG, "***** secret key: " credentials.getAWSSecretKey());
Log.i(TAG, "***** access key: " credentials.getAWSAccessKeyId());
….
ценю любую помощь в решении этой проблемы. Спасибо
Ответ №1:
удалось разобраться.
«Когда вы совершаете вызов, используя временные учетные данные безопасности, вызов должен включать токен сеанса, который возвращается вместе с этими временными учетными данными. AWS использует токен сеанса для проверки временных учетных данных безопасности. Срок действия временных учетных данных истекает через указанный интервал».
я получил sessionToken, используя этот код:
((AWSSessionCredentials) AWSMobileClient.getInstance().getCredentials()).getSessionToken();