Ручная аутентификация с помощью Amazon Cognito - PullRequest
0 голосов
/ 30 апреля 2020

Мне известны два способа аутентификации пользователя и получения access token, один из которых - через Hosted UI , а другой - с различными предоставленными SDK .

Мне нужна конечная точка для получения access token напрямую с учетными данными пользователя.

POST https://that-special-endpoint.com/login
{
 username: "example@email.com",
 password: "Abc123456",
 ...client ID, etc.
}

Я искал некоторое время, но не мог найти, как это сделать. Разве это невозможно из-за некоторых проблем безопасности, о которых я не знаю?

Я действительно задумывался о создании Lambda API и использовал Cognito SDK для удовлетворения моего случая использования, но я не уверен, целесообразно ли это ...

1 Ответ

1 голос
/ 30 апреля 2020

На этот же вопрос дан ответ здесь . Вы можете получить доступ к https://cognito-idp.[region].amazonaws.com/ для вызова API InitiateAuth и RespondToAuthChallenge.


InitiateAuth


  1. Создать json файл, aws-auth-data.json
{
    "AuthParameters": {
        "USERNAME": "your-email@example.com",
        "PASSWORD": "your-first-password",
        "SECRET_HASH": "......(required if the app client is configured with a client secret)"
    },
    "AuthFlow": "USER_PASSWORD_AUTH",
    "ClientId": "5m........................"
}
Отправьте запрос на https://cognito-idp.us-east-2.amazonaws.com/ (если пул пользователей находится в us-east-2 регионе) для вызова InitiateAuth API и запуска потока аутентификации.
curl -X POST --data @aws-auth-data.json \
-H 'X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth' \
-H 'Content-Type: application/x-amz-json-1.1' \
https://cognito-idp.us-east-2.amazonaws.com/
Тогда вы получите токены пользователя.
{
    "AuthenticationResult": {
        "AccessToken": "eyJra........",
        "ExpiresIn": 3600,
        "IdToken": "eyJra........",
        "RefreshToken": "eyJjd........",
        "TokenType": "Bearer"
    },
    "ChallengeParameters": {}
}

RespondToAuthChallenge


Вы можете получить вызов как InitiateAuth ответ. Например, вам будет предложено сменить пароль при первой попытке «InitiateAuth»:

{
    "ChallengeName": "NEW_PASSWORD_REQUIRED",
    "ChallengeParameters": {
        "USER_ID_FOR_SRP": "abababab-......",
        "requiredAttributes": "[]",
        "userAttributes": "{\"email_verified\":\"true\",\"email\":\"your-email@example.com\"}"
    },
    "Session": "DNdY......"
}

В этом случае измените пароль с помощью RespondToAuthChallenge, и вы получите токены.

{
    "ChallengeName": "NEW_PASSWORD_REQUIRED",
    "ChallengeResponses": {
        "USERNAME": "your-email@example.com",
        "NEW_PASSWORD": "your-second-password"
    },
    "ClientId": "5m........................",
    "Session": "DNdYN...(what you got in the preceding response)"
}
curl -X POST --data @aws-change-password.json \
-H 'X-Amz-Target: AWSCognitoIdentityProviderService.RespondToAuthChallenge' \
-H 'Content-Type: application/x-amz-json-1.1' \
https://cognito-idp.us-east-2.amazonaws.com/

См. Также:

https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html

https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#amazon -cognito-пользовательские пулы-стороне клиента аутентификации потока

...