将自定义角色添加到 AWS Cognito 用户池访问令牌

问题描述 投票:0回答:1

我正在使用 AWS Cognito 用户池来保护我的 Web 应用程序、移动应用程序和 API。我有一个定义了角色和权限的数据库。我想在登录过程中将“角色”添加到访问令牌,这样我就不需要进行数据库调用来检查用户角色。

我将无法使用 Cognito 自定义属性,因为人们可以从前端创建自定义角色,并且所有这些信息都保存在数据库中。

amazon-cognito openid-connect aws-userpools
1个回答
5
投票

Cognito 在 2023 年添加了对访问令牌自定义的支持。您必须激活高级功能,然后才能控制发出的声明。通常的 OAuth 模式是考虑包含声明的范围,并且仅在范围存在时才发出声明。我的博客文章有一些有关步骤的更多信息。

export const handler = function(event, context) {
  
  const response = {
    claimsAndScopeOverrideDetails: {
      idTokenGeneration: {
        claimsToSuppress: []
      },
      accessTokenGeneration: {
        claimsToAddOrOverride: {}
      }
    }
  };
  
  if (event.request.scopes.indexOf('myscope') !== -1) {
    const customClaims = response.claimsAndScopeOverrideDetails.accessTokenGeneration.claimsToAddOrOverride;
    customClaims.role = event.request.userAttributes['custom:role'];
  }

  event.response = response;
  context.done(null, event);
};

在支持此功能之前,我使用了另一种模式:在 API 代码中查找额外的声明,并根据访问令牌的哈希值将它们缓存在 API 中。如果您不想在 Cognito 中存储某些用户属性,通常仍然有充分的理由这样做。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.