是否可以在API网关方法上指定允许的范围,以便将允许的范围传递给自定义授权者,并根据访问令牌中的范围声明进行验证。
例如获取用户端点可能对所有用户可用,但创建用户端点仅对具有create:user范围的用户可用。除了确保访问令牌有效之外,自定义授权者还将检查令牌中的范围声明,并将其与该方法允许的范围进行比较。
宁愿不必为所需范围的每种组合编写不同的授权函数。
我注意到Cognito可能会发生这种情况,但是我的身份提供者/令牌发行者是Auth0,因此请使用Lambda函数来验证访问令牌
亲切的问候
答案 0 :(得分:0)
您应该能够使用单个Lambda Authorizer基于令牌范围保护两个端点。您将要使用基于请求的Enhanced Lambda Authorizer
您在Authorization
标头中传递访问令牌,并在处理请求之前验证访问令牌签名和有效期。
授权者收到的Event
对象的示例:
{
"methodArn": "arn:aws:execute-api:us-east-1:XXXXXXXXXX:xxxxxx/dev/GET/hello",
"resource": "/hello",
"requestContext": {
"resourceId": "xxxx",
"apiId": "xxxxxxxxx",
"resourcePath": "/hello",
"httpMethod": "GET",
"requestId": "9e04ff18-98a6-11e7-9311-ef19ba18fc8a",
"path": "/dev/hello",
"accountId": "XXXXXXXXXXX",
"identity": {
"apiKey": "",
"sourceIp": "58.240.196.186"
},
"stage": "dev"
},
"queryStringParameters": {},
"httpMethod": "GET",
"pathParameters": {},
"headers": {
"cache-control": "no-cache",
"x-amzn-ssl-client-hello": "AQACJAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAA…",
"Accept-Encoding": "gzip, deflate",
"X-Forwarded-For": "54.240.196.186, 54.182.214.90",
"Accept": "*/*",
"User-Agent": "PostmanRuntime/6.2.5",
"Authorization": "hello"
},
"stageVariables": {},
"path": "/hello",
"type": "REQUEST"
}
您可以通过event.requestContext.resourcePath
和event.requestContext.httpMethod
的组合来识别请求。根据请求类型和令牌中定义的范围,您可以返回“允许”或“拒绝”策略。例如,如果请求是针对创建用户端点的,但访问令牌不包括create:user
范围,那么您将返回策略以拒绝该请求。