【问题标题】:AWS Cognito Saas Demo: How does it "Get Access Token (with IAM policies)?"AWS Cognito Saas 演示:如何“获取访问令牌(使用 IAM 策略)?”
【发布时间】:2019-02-04 13:53:57
【问题描述】:

设置 我正在通过"Saas identity and isolation with Amazon Cognito" 部署guide 和伴随的source code 工作。

在部署、测试和阅读所有内容后,我能够弄清楚

  • 如何使用 Cognito 用户/每个租户的用户池
  • 如何为每个租户创建角色
  • 如何创建基于租户的策略
  • 如何为每个租户创建身份池

主要问题 这一切是如何联系在一起的?具体来说,租户用户池中的用户如何与身份池中的策略相关联?似乎有人在“获取访问令牌(使用 IAM 策略)”周围挥舞着。这是如何运作的?自定义授权人如何适应?

更多信息 我相信这和token-manager.js:346有关

var cognitoidentity = new AWS.CognitoIdentity({apiVersion: '2014-06-30',region: configuration.aws_region});
var params = {
    IdentityId: event.IdentityId, /* required */
    //CustomRoleArn: 'STRING_VALUE',
    Logins: {
        [event.provider]: event.token,
        /* '<IdentityProviderName>': ... */
    }
};
cognitoidentity.getCredentialsForIdentity(params, function (err, data) {

我看到 getCredentialsForIdentity 被记录为采用 CustomRoleArn,如下所示。上面的代码已将其注释掉,但代码仍然有效。

var params = {
  IdentityId: 'STRING_VALUE', /* required */
  CustomRoleArn: 'STRING_VALUE',
  Logins: {
    '<IdentityProviderName>': 'STRING_VALUE',
    /* '<IdentityProviderName>': ... */
  }
};

自定义授权者 我可以在custom-authorizer/index.js 中找到与权限/策略相关的唯一代码:

var policy = new AuthPolicy(principalId, awsAccountId, apiOptions);
policy.allowAllMethods();
const authResponse = policy.build();

Gasp> 这段代码看起来好像我们正在绕过所有策略。这个应用程序是否有可能伪造它并且只在 Angular 中处理路由?可能不是。

其他问题 我已经能够通过AWS PowerShell 提取我需要知道的几乎所有内容。我不知道如何检索的一件事是用户池身份提供程序。 Get-CGIPIdentityProvider cmdlet 需要“ProviderName”。这是什么? “认知”? “www.amazon.com”?一些标识符?

重复主要问题,以防您只是滚动到底部。 这一切是如何联系在一起的?具体来说,租户用户池中的用户如何与身份池中的策略相关联?似乎有人在“获取访问令牌(使用 IAM 策略)”周围挥舞着。这是如何运作的?自定义授权人如何适应?

【问题讨论】:

    标签: amazon-cognito aws-iam


    【解决方案1】:

    角色通过认知身份池在内部关联。下面的代码显示了我们通过配置来映射它。

    cognito-user.js:911 - addRoleToIdentity

    var cognitoidentity = new AWS.CognitoIdentity(...);
    
    # [ ... ]
    
    RulesConfiguration: {
        Rules: [/* required */
            {
            Claim: 'custom:role', /* required */
            MatchType: 'Equals', /* required */
            RoleARN: identityPoolRoleParams.rolesystem, /* required */
            Value: identityPoolRoleParams.adminRoleName /* required */
            },
            {
            Claim: 'custom:role', /* required */
            MatchType: 'Equals', /* required */
            RoleARN: identityPoolRoleParams.rolesupportOnly, /* required */
            Value: identityPoolRoleParams.userRoleName /* required */
            },
        ]
    cognitoidentity.setIdentityPoolRoles(params, function (err, data) {
    
    # [ ... ]
    

    此配置可以用以下伪代码表示,其中 user.'custom:role' 是一个字符串。

    const user = userpool.getuser(...)
    if (user.'custom:role' == identityPoolRoleParams.adminRoleName)
        role = identityPoolRoleParams.roleSystem
    else if (user.'custom:role' == identityPoolRoleParams.userRoleName) 
        role = identityPoolRoleParams.rolessupportOnly
    

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 2020-11-20
      • 2021-01-05
      • 2014-10-08
      • 2018-06-07
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      相关资源
      最近更新 更多