簡體   English   中英

AWS API網關自定義授權程序AuthorizerConfigurationException

[英]AWS API Gateway Custom Authorizer AuthorizerConfigurationException

對於Kinesis流,我使用AWS API Gateway創建了一個代理API。 我使用python Lambda為代理添加了一個自定義授權程序。 在發布lambda函數和部署API之后,我能夠使用Gateway Test功能成功測試API。 我可以看到cloudwatch中的日志,其中包含來自自定義auth lambda函數的詳細打印。 身份驗證成功后,API Gateway將記錄推送到我的Kinesis流

但是當我從Chrome Postman客戶端調用相同的API時,我得到500內部服務器錯誤 ,響應頭包括X-Cache→來自cloudfront的錯誤,x-amzn-ErrorType→AuthorizerConfigurationException

Lambda auth函數返回允許對我的API執行請求的策略。 返回的政策文件是:

{
              "policyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                  {
                    "Action": "execute-api:Invoke",
                    "Resource": [
                      "arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*"
                    ],
                    "Effect": "Allow"
                  }
                ]
              },
              "principalId": "Foo"
            }

為什么請求會因Chrome或curl而失敗,但相同的API測試可以在API網關中正常運行?

AuthorizerConfigurationException通常表示API Gateway由於權限錯誤而無法調用授權程序。

請確保您已正確配置API網關調用的功能。 通過刪除功能並將其重新添加到授權程序,可以輕松重置此功能。 然后,控制台將提示您添加必要的權限。

找出導致問題的原因。 從python lambda函數,我返回一個json字符串實例。 相反它應該是json對象。 奇怪的是,當我從API網關“測試”功能測試API時,相同的lambda函數沒有錯誤。 但是當從互聯網(curl或chrome)調用API時,它失敗了。

#return policy_string ... this is incorrect.
return json.loads(policy_string)

我遇到了同樣的錯誤,在我的情況下是一個nodejs函數,我正在添加一個上下文密鑰作為數組。

{
  policyDocument: {
  Version: '2012-10-17',
  Statement: [{
    Action: 'execute-api:Invoke',
    Effect: effect,
    Resource: `${arn.split('/').slice(0, 2).join('/')}/*`,
  }],
},
context: {
  roles: ['admin']
}

正如醫生所說:

您可以通過調用$ context.authorizer.stringKey,$ context.authorizer來訪問映射模板中的上下文映射的stringKey,numberKey或booleanKey值(例如,“value”,“1”或“true”)。 numberKey或$ context.authorizer.booleanKey。 返回的值都是字符串化的。 請注意,您不能將JSON對象或數組設置為上下文映射中任何鍵的有效值。

刪除角色鍵,它正在工作。

在我的情況下,我沒有返回格式正確的IAM策略文檔。 我的Authorizer函數對如何從請求中獲取一些參數做了錯誤的假設,並且默認結果不是正確的策略(這是我的具體情況)。 我設法使用CloudWatch日志服務對其進行調試,傳統的日志記錄指令來自我的功能代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM