web-dev-qa-db-fra.com

Comment accéder au groupe pour un compte utilisateur Cognito?

Dans AWS Cognito, vous pouvez ajouter un utilisateur à un groupe (après avoir d'abord créé un groupe). Un utilisateur peut appartenir à un ou plusieurs groupes.

En utilisant le SDK JavaScipt ( https://github.com/aws/Amazon-cognito-identity-js ), existe-t-il un moyen de lire les groupes affectés? Voudrais aws-sdk fournir un accès sur Amazon-cognito-identity-js?

20
user1322092

Si vous avez juste besoin des groupes Cognito UserPools dont l'utilisateur authentifié est membre, au lieu de faire un appel d'API distinct, ces données sont encodées dans le idToken.jwtToken que vous avez reçu lors de l'authentification.

Ceci est utile pour les décisions d'accès/rendu côté client dans angular/react/etc. applications.

Voir la revendication de tableau "cognito: groups" dans cet exemple idToken.jwtToken décodé:

{
  "sub": "a18626f5-a011-454a-b4c2-6969b3155c24",
  "cognito:groups": [
    "uw-app-administrator",
    "uw-app-user"
  ],
  "email_verified": true,
  "iss": "https://cognito-idp.<region>.amazonaws.com/<user-pool-id>",
  "cognito:username": "<my-user-name>",
  "given_name": "<my-first-name>",
  "aud": "<audience-code>",
  "token_use": "id",
  "auth_time": 1493918449,
  "nickname": "Bubbles",
  "exp": 1493922049,
  "iat": 1493918449,
  "email": "<my-email>"
}

J'espère que cela t'aides.

29
bfieber

À l'origine, je m'attendais à ce que l'API JavaScript de Cognito fournisse une propriété ou une méthode simple pour renvoyer la liste des groupes, mais à la place, j'ai conclu qu'elle était enterrée dans un jeton et que je devais donc en savoir plus sur jwt . Une fois l'utilisateur Cognito établi et la session récupérée, le tableau de groupes est disponible dans l'IdToken.

var jwtDecode = require('jwt-decode');
var AmazonCognitoIdentity = require('Amazon-cognito-identity-js');
var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
var CognitoUser = AmazonCognitoIdentity.CognitoUser;

var userPool = new CognitoUserPool({UserPoolId:'', ClientId:''");
...
app.get('/app', function(req, res){
    var cognitoUser = userPool.getCurrentUser();
    if(cognitoUser != null){
        cognitoUser.getSession(function(err, session) {
            if (err) {
                console.error(err);
                return;
            }
            console.log('session validity: ' + session.isValid());

            var sessionIdInfo = jwtDecode(session.getIdToken().jwtToken);
            console.log(sessionIdInfo['cognito:groups']);
        });
    }
});
10
jspeaks

Cette API existe - AdminListGroupsForUser . La raison pour laquelle vous ne le voyez pas est, comme son nom l'indique, que l'API n'est actuellement disponible que sur une base administrative. Cognito n'inclut pas les API d'administration dans les SDK mobiles. Il serait inclus dans les SDK AWS/SDK côté serveur, mais il convient de noter que cette API nécessite des informations d'identification de développeur, comme toutes les API d'administration.

6
Jeff Bailey

Si vous utilisez Amplify, si vous utilisez la méthode currentAuthenticatedUser vous pouvez obtenir les groupes de la réponse en utilisant:

response.signInUserSession.idToken.payload['cognito:groups']

Ou en utilisant la méthode currentSession, vous pouvez utiliser l'une des méthodes suivantes:

response.accessToken.payload['cognito:groups']

ou

response.idToken.payload['cognito:groups']
1

Vous pouvez désormais obtenir facilement les groupes d'utilisateurs à partir de la session utilisateur:

session.getIdToken().decodePayload();

Il contient un tableau de groupes dans le cognito:groups clé retournée

1
bwobbones

Vous n'avez pas besoin de décoder quoi que ce soit, les données sont déjà disponibles à partir de session.getIdToken().payload['cognito:groups']

0
LiriB