【问题标题】:AWS API gateway 403 error for Custom Authorizer自定义授权者的 AWS API 网关 403 错误
【发布时间】:2020-11-16 11:02:11
【问题描述】:

我正在使用 Claudia-api-builder 来创建和部署。 https://github.com/claudiajs/example-projects/tree/master/custom-authorizers

我的 AWS 自定义授权方如下所示:

let jwtDecode = require('jwt-decode');

var generatePolicy = function (authToken, methodArn) {
    'use strict';
    var tmp = methodArn.split(':'),
    apiGatewayArnTmp = tmp[5].split('/'),
    awsAccountId = tmp[4],
    region = tmp[3],
    restApiId = apiGatewayArnTmp[0],
    stage = apiGatewayArnTmp[1];
    let group = jwtDecode(authToken)["cognito:groups"];

if (group[0] === 'Admin') {
        return {
            'principalId': authToken.split('-')[0],
            'policyDocument': {
                'Version': '2012-10-17',
                'Statement': [{
                    'Effect': 'Allow',
                    'Action': [
                        'execute-api:Invoke'
                    ],
                    'Resource': [
                        'arn:aws:execute-api:' + region + ':' + awsAccountId + ':' + restApiId + '/' + stage + '/GET/citizens',
                        'arn:aws:execute-api:' + region + ':' + awsAccountId + ':' + restApiId + '/' + stage + '/GET/citizens/{citizenId}/personal-details'
                    ]
                }]
            }
        };
    }


exports.auth = function testAuth(event, context, callback) {
    'use strict';
    console.log('got event', event);

    /*
     * {
     * "type":"TOKEN",
     * "authorizationToken":"<Incoming bearer token>",
     * "methodArn":"arn:aws:execute-api:<Region id>:<Account id>:<API id>/<Stage>/<Method>/<Resource path>"
     * }
     */
    if (event && event.authorizationToken && event.methodArn) {
        callback(null, generatePolicy(event.authorizationToken, event.methodArn));
    } else {
        callback('Unauthorized');
    }
};

资源中的第一个 API 工作正常,但是当我调用第二个 API 时,i:e:

'arn:aws:execute-api:' + region + ':' + awsAccountId + ':' + restApiId + '/' + stage + '/GET/citizens/{citizenId}/personal-details'

它给了我 403 Forbidden with :

{
    "Message": "User is not authorized to access this resource"
}

就我而言,授权缓存也被禁用

有解决这个问题的办法吗?

【问题讨论】:

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


    【解决方案1】:

    资源不应是 API Gateway 方法的路径。

    其实应该是资源的Arn。您可以通过执行以下操作从 AWS 控制台获取此信息:

    • 开放 API 网关
    • 选择您的 API 网关
    • 点击Resources选项
    • 找到您的资源(这将是citizens/{citizenId}/personal-details 下的GET 方法)。点击它。
    • 您可以使用Arn

    当使用基于路径的参数时,任何参数都会被* 替换,所以它会变成下面的。

    'arn:aws:execute-api:' + region + ':' + awsAccountId + ':' + restApiId + '/' + stage + '/GET/citizens/*/personal-details'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-24
      • 2017-11-05
      • 1970-01-01
      • 2019-01-04
      • 2018-08-27
      • 2018-10-01
      • 2017-05-20
      • 1970-01-01
      相关资源
      最近更新 更多