我们如何通过自定义授权 lambda 注入声明

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

之前我们使用授权者类型作为 cognitouserpool,所以当我们向 customAuthorization 添加 API 端点发送请求时,意味着在该 API 事件中,我们在声明内的授权者对象内获取 requestContext 对象,因此基于我们通过使用内部 cliams 来创建应用程序,有一些用户相关信息,例如“cognito:用户名”,这是现有流程。 现在我正在为我的nodejs API准备一个自定义授权lambda,我想也向相应的请求事件发送声明我只在授权者对象中获取requestContext对象我获取我在自定义授权lambda中发送的信息我想要在自定义授权中也注入声明对象。

在我的自定义授权 lambda 中,我首先使用这些包“jsonwebtoken”、“jwk-to-pem”来验证令牌,在我们尝试在内部生成策略函数之后,我们将发送一些必需的信息,例如“操作”, “效果”、“资源”以及我们想要传递的每个 lambda 事件(如用户名、用户角色等)所需信息中的这些“上下文”对象,通过这种方法,我们能够命中适当的 lambda,但我想注入声明对象也应该用于我们在该 API 事件中点击的 API,我们应该在声明内获取授权者对象内的 requestContext 对象,就像我们之前获得的与 cognitouerpool 相关事件的授权者类型一样,就像我想要的那样。

aws-lambda authorization aws-sdk-nodejs aws-authorizer
1个回答
0
投票

使用自定义 API Gateway Lambda 授权方时,通过 Lambda 代理集成,您仍将在后端收到访问令牌,例如

Authorization
标头,可让您使用 JWT 库解析声明。

如果您不使用 Lambda 代理集成,则需要使用映射模板将相关标头传递到 Lambda:

https://repost.aws/knowledge-center/custom-headers-api-gateway-lambda

您没有提及是否使用 Lambda 代理集成,在这种情况下,授权者上下文将作为输入事件的一部分直接传递到后端函数,并且可以通过

event.requestContext.authorizer.key
:

访问各个值

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html

请注意以下事项:

您可以访问

stringKey
numberKey
booleanKey
值(对于 例如,映射中上下文映射的“值”、“1”或“真”) 通过调用
$context.authorizer.stringKey
来模板,
$context.authorizer.numberKey
,或
$context.authorizer.booleanKey
, 分别。返回的值都是字符串化的。请注意,您 无法将 JSON 对象或数组设置为中任何键的有效值 上下文图。

因此,您不能让自定义授权者解析声明对象,并将其设置为授权者上下文上的值,您需要手动在授权者上设置每个声明值

© www.soinside.com 2019 - 2024. All rights reserved.