如何访问Cognito用户帐户的组?

use*_*092 21 amazon-cognito aws-sdk aws-cognito

在AWS Cognito中,您可以将用户添加到组(首次创建组之后).用户可以属于一个或多个组.

使用JavaScipt SDK(https://github.com/aws/amazon-cognito-identity-js),有没有办法读取分配的组?会aws-sdk提供访问权限amazon-cognito-identity-js吗?

小智 30

如果您只需要Cognito UserPools组,则Authenticated User是其成员,而不是进行单独的API调用,该数据将在您进行身份验证时收到的idToken.jwtToken中进行编码.

这对于angular/react/etc中的客户端呈现/访问决策很有用.应用.

请参阅此示例中的"cognito:groups"数组声明已解码的idToken.jwtToken:

{
  "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>"
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


jsp*_*aks 11

我最初期望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']);
        });
    }
});
Run Code Online (Sandbox Code Playgroud)


小智 8

如果您使用 Amplify,如果您使用currentAuthenticatedUser方法,您可以使用以下方法从响应中获取组:

response.signInUserSession.idToken.payload['cognito:groups']
Run Code Online (Sandbox Code Playgroud)

或者使用currentSession方法,您可以使用以下任一方法:

response.accessToken.payload['cognito:groups']
Run Code Online (Sandbox Code Playgroud)

或者

response.idToken.payload['cognito:groups']
Run Code Online (Sandbox Code Playgroud)


Jef*_*ley 6

此API确实存在 - AdminListGroupsForUser.顾名思义,您没有看到它的原因是API目前仅在管理员基础上可用.Cognito在移动SDK中不包含管理API.它将包含在AWS SDK /服务器端SDK中,但值得注意的是,此API确实需要开发人员凭据,所有管理API也是如此.

  • 这还算公平.作为管理员API,您必须拥有开发者信誉,因此作为客户端应用程序,这是一个冒险的想法.我可以将此作为添加用户级版本的功能请求! (2认同)