AWS API Gateway自定义授权者角色验证

时间:2019-04-16 09:25:27

标签: amazon-web-services aws-lambda aws-api-gateway

是否可以在API网关方法上指定允许的范围,以便将允许的范围传递给自定义授权者,并根据访问令牌中的范围声明进行验证。

例如获取用户端点可能对所有用户可用,但创建用户端点仅对具有create:user范围的用户可用。除了确保访问令牌有效之外,自定义授权者还将检查令牌中的范围声明,并将其与该方法允许的范围进行比较。

宁愿不必为所需范围的每种组合编写不同的授权函数。

我注意到Cognito可能会发生这种情况,但是我的身份提供者/令牌发行者是Auth0,因此请使用Lambda函数来验证访问令牌

亲切的问候

1 个答案:

答案 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.resourcePathevent.requestContext.httpMethod的组合来识别请求。根据请求类型和令牌中定义的范围,您可以返回“允许”或“拒绝”策略。例如,如果请求是针对创建用户端点的,但访问令牌不包括create:user范围,那么您将返回策略以拒绝该请求。