在Auth0中创建不同的JWT授权人,并根据允许的角色附加权限



我的Auth0租户中有三种用户:

  1. 常规用户(无角色(
  2. 主持人用户(分配"Mod"角色(
  3. 管理员用户(分配"管理员"角色(

我在Auth0中创建了一个API,并通过新的AWS API网关HTTP API中的JWT授权器连接到端点。

有些端点允许的业务逻辑只允许常规用户和管理员,有些端点允许Mod和admin。例如:

  1. 端点1:允许常规用户和管理员
  2. 端点2:允许Mod和Admin
  3. 端点3:仅允许Mod

目前,授权人允许Auth0中用户数据库中的任何用户,我通过几个Auth0的管理API:检查应用程序中用户的身份

  1. /userInfo以确保令牌与:user_id匹配
  2. /oauth/token获取Auth0管理API访问令牌
  3. /api/v2/users/:user_id以获取用户配置文件
  4. /api/v2/users/:user_id/roles获取角色

我认为应该有更好的方法来处理身份检查。是否可以创建具有不同角色/权限范围的多个授权人(例如,允许常规用户和管理员(,并相应地连接到相关端点?

根据AWS API网关文档,我意识到Lambda的event.requestContext.authorizer.claims中有一个claims对象。

  1. 因此,不需要额外的/userInfo调用
  2. 我添加了2个Auth0规则来将用户角色合并到user.app_metadataclaims对象

#2的代码示例:

function assignRoleToAppMetadata (user, context, callback) {
const ManagementClient = require('auth0@2.19.0').ManagementClient
const management = new ManagementClient({
domain: '{YOUR_ACCOUNT}.auth0.com',
clientId: '{YOUR_NON_INTERACTIVE_CLIENT_ID}',
clientSecret: '{YOUR_NON_INTERACTIVE_CLIENT_SECRET}'
})
const params = { id: user.user_id }
management.getUserRoles(params)
.then(roles => {
user.app_metadata = user.app_metadata || {}
user.app_metadata.roles = roles
return auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
})
.then(() => callback(null, user, context))
.catch(err => {
console.error(err.message)
callback(null, user, context)
})
}

此外,以下规则将角色信息附加到/userInfo:

function(user, context, callback) {
const namespace = 'https://{YOUR_ACCOUNT}.auth0.com/'
context.idToken[namespace + 'roles'] = user.app_metadata.roles
callback(null, user, context)
}

相关内容

  • 没有找到相关文章

最新更新