自定义授权
Lambda执行角色:完全访问Api网关和Lambda
令牌来源: method.request.header.Authorization
令牌验证:空白
将此自定义授权添加到api方法请求。授权人测试是成功的,但是要求邮递员api然后401.
{
"message": "Unauthorized"
}
自定义授权人Lambda
console.log('Loading function');
exports.handler = function(event, context, callback) {
console.log("event:",JSON.stringify(event)); console.log("event:",JSON.stringify(context));
console.log('Client token: ' + event.authorizationToken);
console.log('Method ARN: ' + event.methodArn);
callback(null, {
"principalId": "18",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1459758003000",
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:*"
]
}
]
}
});
}
邮递员代码:
curl --request GET \
--url {url} \
--header 'authorization: Test Token' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--header 'postman-token: c9110a92-414e-e1aa-61fb-194758dace86'
解决方案
令牌来源:授权
答案 0 :(得分:1)
API Gateway已于今年1月18日发生变化。需要了解以下内容。
更多的陷阱要小心。 - 使用标准字符串,例如'授权' (这是一个标准),是你使用不同的字符串,改变每一个地方。 - 传递给lambda的授权令牌,没有代理集成请求,作为事件[' authorizationToken']而不是事件['授权'] - 如果你得到像Lambda Malform这样的错误......,那是因为你使用的是Lambda Proxy,它需要特定格式的响应,而不是以格式发送数据。 - 如果您使用邮递员,请切换到' raw'反对'漂亮'模式。
答案 1 :(得分:0)
使用自定义TOKEN授权程序调用API
添加自定义授权令牌标头并将值设置为allow。选择发送。
答案 2 :(得分:0)
您不会通过Postman调用自定义授权程序,这是API网关的工作。
每次调用受自定义授权程序保护的端点时,API网关都会检查其策略缓存中是否存在给定授权标头的值。如果该值不存在,将调用您的自定义授权程序来验证请求。
流程的简单表示:
Lambda Handler (handles a protected endpoint GET /users/{id})
|
| ------------
| |
| Custom Authorizer
| /
| / (if the request is not authorized yet)
| /
Api Gateway
|
|
|
Request (with Authorization Header)
您只需将资源方法的授权设置为自定义授权程序,然后让API网关完成所有工作。