Я пытаюсь аутентифицировать приложение Java с помощью Cognito.
Я использовал для python библиотеку ордеров, которая работала очень хорошо. Но я хочу сделать то же самое в Java сейчас.
Моя функция Python, которую я использовал для аутентификации с ордером библиотекой
def SRPauthentication(organizationAdmin,
password,
pool_id,
client_id,
client):
aws = AWSSRP(username=organizationAdmin,
password=password,
pool_id=pool_id,
client_id=client_id,
client=client)
tokens = aws.authenticate_user()
authorization_token= tokens['AuthenticationResult']['IdToken']
return authorization_token
с этим я мог бы легко получить доступ к некоторым защищенным API.
Теперь я хочу сделать то же самое с Java, но у меня есть проблемы.
На данный момент это мое решение:
public static void GetCreds()
{
AWSCognitoIdentityProvider identityProvider = AWSCognitoIdentityProviderClientBuilder.defaultClient();
AdminInitiateAuthRequest adminInitiateAuthRequest = new AdminInitiateAuthRequest().
withAuthFlow(AuthFlowType.USER_SRP_AUTH).
withClientId("234234234234").withUserPoolId("eu-central-1_sdfsdfdsf")
.addAuthParametersEntry("USERNAME", "UserK").
addAuthParametersEntry("PASSWORD","#######);
adminInitiateAuthRequest.getAuthFlow();
AdminInitiateAuthResult adminInitiateAuth = identityProvider.adminInitiateAuth(adminInitiateAuthRequest);
System.out.println(adminInitiateAuth.getAuthenticationResult().getIdToken());
}
Когда я запускаю это, я получаю исключение:
Исключение в потоке "main" com.amazonaws.services.cognitoidp.model.AWSCognitoIdentityProviderException: Пользователь: arn: aws: iam :: XXXXXXXXXXXXXXXXX: пользователь / хан не авторизован для выполнения: cognito-idp: AdminInitiateAuth на ресурсе: arn: cognito-idp: eu-central-1: XXXXXXXX: userpool / eu-central-1_XXXXXXX с явным отказом (Служба: AWSCognitoIdentityProvider; Код состояния: 400; Код ошибки: AccessDeniedException; Код запроса: 21be0b8e-adec-11e8-ad45-23434 )
Там написано, что я не уполномочен выполнять подобные инструкции. Так что я думаю, что я делаю что-то вообще неправильно. Поскольку он работает с моим кодом Python и в Java, он распознает мое имя пользователя по учетным данным. Вызов Cognito на самом деле должен быть независимым от моих учетных данных AWS, верно?
Как пройти аутентификацию в Cognito с использованием Java, чтобы получить токен для доступа к защищенным службам aws?
EDIT:
AWSCognitoIdentityProvider identityProvider = AWSCognitoIdentityProviderClientBuilder.standard()
.build();
InitiateAuthRequest adminInitiateAuthRequest = new InitiateAuthRequest()
.withAuthFlow(AuthFlowType.USER_SRP_AUTH)
.withClientId("XXXXXXXXXXXXXXXXX")
.addAuthParametersEntry("USERNAME", "user").
addAuthParametersEntry("PASSWORD","za$Lwn")
.addAuthParametersEntry("SRP_A",new AuthenticationHelper("eu-central-1XXXXXXXXX").getA().toString(16));
adminInitiateAuthRequest.getAuthFlow();
InitiateAuthResult adminInitiateAuth = identityProvider.initiateAuth(adminInitiateAuthRequest);
System.out.println(adminInitiateAuth);
Я изменил AdminInitateAuthRequest на InitateAuthRequest. После этого у меня был параметр Ошибка пропуска SRP_A, который я как-то исправил с похожим вопросом здесь
И теперь я получаю это:
{ChallengeName: PASSWORD_VERIFIER,ChallengeParameters: {SALT=877734234324234ed68300f39bc5b, SECRET_BLOCK=lrkwejrlewrjlewkjrewlrkjwerlewkjrewlrkjewrlkewjrlewkrjZ+Q==, USER_ID_FOR_SRP=user, USERNAME=user, SRP_B=43ecc1lwkerjwelrkjewlrjewrlkewjrpoipweoriwe9r873jr34h9r834hr3455f7d079d71e5012f1623ed54dd10b832792dafa3438cca3f59c0f462cbaee255d5b7c2werwerwerkjweorkjwerwerewrf5020e4f8b5452f3b89caef4a797456743602b80b5259261f90e52374adc06b456521a9026cce9c1cbe8b9ffd6040e8c1589d35546861422110ac7e38c1c93389b802a03e3e2e4a50e75d088275195f836f66e25f1a431dd56bb2},}
Я сократил результат со всеми ключами, но что делать дальше?