Использование Instagram в качестве «авторизатора» для API Gateway - AWS Cognito - PullRequest
0 голосов
/ 26 июня 2018

Я использую Congnito User Pool для выполнения авторизации через API-шлюз, которая работает нормально. Теперь я пытаюсь добавить Instagram в качестве одного из провайдеров входа в систему, для этого я создал Провайдер нестандартной аутентификации в федеративных удостоверениях и с помощью кода ниже:

var cognitoidentity = new AWS.CognitoIdentity({ apiVersion: '2014-06-30' });

var params = {
    IdentityPoolId: 'us-east-1:7d99e750-.....',
    Logins: {
        'login.instagram': 'Access-Token-Returned-By-Instagram',
    },
    TokenDuration: 60
};

cognitoidentity.getOpenIdTokenForDeveloperIdentity(params, function (err, data) {
    if (err) {
        console.log(err, err.stack);
    } else {
        console.log(data);
        var idParams = {
            IdentityId: data['IdentityId'],
            Logins: {
                'cognito-identity.amazonaws.com': data['Token']
            }
        };

        cognitoidentity.getCredentialsForIdentity(idParams, function (err2, data2) {
            if (err2) console.log(err2, err2.stack); // an error occurred
            else console.log(data2);           // successful response
        });
    }
});

Я могу получить accessToken и sessionToken , однако мне все еще не удается найти способ получить idToken и accessToken который требуется API-шлюзом для авторизации входящего запроса.

Я попытался просмотреть SDK и форум AWS, но все еще не могу найти способ использовать пользовательский федеративный поставщик удостоверений для авторизации API-шлюза, использующего пул cognito.

1 Ответ

0 голосов
/ 08 февраля 2019

Я собираюсь обернуться в этом ....

  1. У вас есть пользователь Cognito?

    • Нет
import { CognitoUser, CognitoUserPool, AuthenticationDetails } from "amazon-cognito-identity-js";

let cognitoUser;

const userPool = new CognitoUserPool({
   UserPoolId: config.USER_POOL.pool_Id, //your userpool id
   ClientId: config.appClientId, //your appClient 
});

const userData = {
       Username: 'user name',
       Pool: userPool
 };

cognitoUser = new CognitoUser(userData);
/* Should now have a cognitoUser */
  1. Аутентификация вашего Cognito пользователя
const authenticationData = {
    Username : payload.userName,
    Password : payload.password,
};

const authenticationDetails = new AuthenticationDetails(authenticationData);

cognitoUser.authenticateUser(authenticationDetails, {
    onSuccess: function (result) {
        const accessToken = result.getAccessToken().getJwtToken();

        /* Use the idToken for Logins Map when Federating User Pools with identity pools or when passing through an Authorization Header to an API Gateway Authorizer*/
         const idToken = result.idToken.jwtToken;

          /*
            Do something with 
              idToken
              accessToken

           I would write them to a file or encrypt them and store them on the localStorage OR encrypt and save in REDUX store.
          */


    },

    onFailure: function(err) {
         //handle error
   },

});
...