根据AWS API Gateway Doc ,我意识到 Lambda 中有一个claims
对象。event.requestContext.authorizer.claims
- 因此,额外的
/userInfo
调用是不必要的。
- 我添加了 2 个Auth0 规则来合并用户角色
user.app_metadata
和claims
对象。
#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)
}