【问题标题】:AWS API Gateway Custom Authorizer Role ValidationAWS API Gateway 自定义授权方角色验证
【发布时间】:2019-09-06 08:33:52
【问题描述】:

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

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

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

我注意到 Cognito 可以进行类似的操作,但我的身份提供者/令牌颁发者是 Auth0,因此使用 Lambda 函数来验证访问令牌

亲切的问候

【问题讨论】:

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


    【解决方案1】:

    您应该能够使用单个 Lambda 授权器来根据令牌范围保护两个端点。您将需要使用基于请求的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 的组合来识别请求。根据令牌中定义的请求类型和范围,您可以返回 Allowed 或 Denied 策略。例如,如果请求是针对创建用户端点但访问令牌不包括 create:user 范围,那么您将返回拒绝该请求的策略。

    【讨论】:

    • 好的,所以我需要将资源路径传递到函数中,而不是能够向我的资源添加一些任意的额外参数,例如AllowedScopes,后者会更可取,因为每次我添加资源时,我都不需要更新授权方来解析新的资源路径,但我可以看到,如果这是不可能的,至少这是如何工作的
    • 是的,每次您有具有自定义要求的新资源时,您都需要更新 Lambda Authorizer。
    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 2017-03-12
    • 2019-03-04
    • 2018-04-17
    • 2018-03-21
    • 2020-06-17
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多