web-dev-qa-db-ja.com

Cognitoユーザーアカウントのグループにアクセスするにはどうすればよいですか?

AWS Cognitoでは、ユーザーをグループに追加できます(最初にグループを作成した後)。ユーザーは1つ以上のグループに属することができます。

JavaScipt SDK( https://github.com/aws/Amazon-cognito-identity-js )を使用して、割り当てられたグループを読み取る方法はありますか? aws-sdk経由のアクセスを提供Amazon-cognito-identity-js

20
user1322092

Cognito UserPoolsグループのみが必要な場合、認証されたユーザーは、別のAPI呼び出しを行う代わりに、認証時に受け取ったidToken.jwtTokenにエンコードされます。

これは、angular/react/etcでのクライアント側のレンダリング/アクセスの決定に役立ちます。アプリ。

このデコードされたidToken.jwtTokenの例の「cognito:groups」配列クレームを参照してください。

{
  "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>"
}

お役に立てれば。

29
bfieber

私はもともと、Cognito JavaScript APIがグループのリストを返す簡単なプロパティまたはメソッドを提供することを期待していましたが、代わりにトークン内に埋まっていると結論付けたため、 jwt について学ぶ必要がありました。 Cognitoユーザーが確立され、セッションが取得されると、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

このAPIは存在します- AdminListGroupsForUser 。名前が表示されない理由は、その名前が示すように、現在APIは管理者ベースでのみ利用可能であるためです。 Cognitoは、モバイルSDKに管理APIを含めません。 AWS SDK /サーバー側SDKに含まれますが、このAPIにはすべての管理APIと同様に開発者の認証情報が必要であることに注意してください。

6
Jeff Bailey

Amplifyを使用している場合、currentAuthenticatedUserメソッドを使用すると、応答からグループを取得できます。

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

またはcurrentSessionメソッドを使用すると、次のいずれかを使用できます。

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

または

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

ユーザーセッションからユーザーグループを簡単に取得できるようになりました。

session.getIdToken().decodePayload();

これには、返されるcognito:groupsキーにグループの配列が含まれます

1
bwobbones

何もデコードする必要はありません。データは既にsession.getIdToken().payload['cognito:groups']から利用可能です

0
LiriB