Lambda Cognito 用户池授权方 - 我可以自动获取自定义用户属性吗?
Lambda Cognito User Pool authorizer - can I automatically get the custom user attributes?
我正在使用 Lambda 函数,使用 Cognito 用户池授权器通过 API 网关执行。
我知道我可以从 event.requestContext.authorizer.claims
.[= 获取 "standard" 用户属性(如 sub
、email
、cognito:username
等)。 17=]
但这不包括自定义用户属性(如 custom:myAttribute
)。
我知道我可以通过 adminGetUser 获取它们,这可行,但我想知道我是否可以保存此调用并以某种方式在 event
?[=17= 中自动获取这些自定义属性]
您是否已查看此文档以了解自定义声明?
https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html。
您将需要按以下方式为自定义属性定义上下文:
{
"context" : {
"role" : "$context.authorizer.claims['custom:myAttribute']"
}
}
将自定义属性添加到 Cognito 用户池并为用户为其分配值后,有几个原因导致它不会出现在 requestContext.authorizer.claims
集合中。
第一个也是最明显的一点是,您需要使自定义属性可通过用于生成您用于身份验证的 ID 令牌的应用程序客户端读取。如果您使用的是 AWS 控制台,这可以通过导航到 App Clients -> Show Details -> Set attribute read and write permissions
然后勾选您希望对 Lambda 可见的属性来完成。
即使您已完成第一步,您的属性仍未显示的第二个原因是用户的声明已编码在您生成的 ID 令牌中。这意味着如果您使用的是在使属性可读之前创建的 ID 令牌,您仍然看不到它们。解决方案是为您的用户生成一个新的 ID 令牌,此时您应该在 Lambda 的请求上下文中看到属性。
我正在使用 Lambda 函数,使用 Cognito 用户池授权器通过 API 网关执行。
我知道我可以从 event.requestContext.authorizer.claims
.[= 获取 "standard" 用户属性(如 sub
、email
、cognito:username
等)。 17=]
但这不包括自定义用户属性(如 custom:myAttribute
)。
我知道我可以通过 adminGetUser 获取它们,这可行,但我想知道我是否可以保存此调用并以某种方式在 event
?[=17= 中自动获取这些自定义属性]
您是否已查看此文档以了解自定义声明? https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html。 您将需要按以下方式为自定义属性定义上下文:
{
"context" : {
"role" : "$context.authorizer.claims['custom:myAttribute']"
}
}
将自定义属性添加到 Cognito 用户池并为用户为其分配值后,有几个原因导致它不会出现在 requestContext.authorizer.claims
集合中。
第一个也是最明显的一点是,您需要使自定义属性可通过用于生成您用于身份验证的 ID 令牌的应用程序客户端读取。如果您使用的是 AWS 控制台,这可以通过导航到 App Clients -> Show Details -> Set attribute read and write permissions
然后勾选您希望对 Lambda 可见的属性来完成。
即使您已完成第一步,您的属性仍未显示的第二个原因是用户的声明已编码在您生成的 ID 令牌中。这意味着如果您使用的是在使属性可读之前创建的 ID 令牌,您仍然看不到它们。解决方案是为您的用户生成一个新的 ID 令牌,此时您应该在 Lambda 的请求上下文中看到属性。