1

我試圖授權雖然AWS API網關的定製授權的API調用,
這基本上是一個自定義的lambda函數這需要在以下格式 -AWS API網關自定義授權者拉姆達

{ 
    "authorizationToken": "0c34ba00bde34200b383abe22bcfef96", 
    "methodArn": "arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/null/GET/", 
    "type": "TOKEN" 
} 

的下列頭並預計在以下格式的響應 -

{ 
    "principalId": "xxxxxxx", // the principal user identification associated with the token send by the client 
    "policyDocument": { // example policy shown below, but this value is any valid policy 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
     "Effect": "Allow", 
     "Action": [ 
      "execute-api:Invoke" 
     ], 
     "Resource": [ 
      "arn:aws:execute-api:us-east-1:xxxxxxxxxxxx:xxxxxxxx:/test/*/mydemoresource/*" 
     ] 
     } 
    ] 
    } 
} 

我能夠做的內在邏輯與autho rizationToken和驗證功能是否應在「允許」或「拒絕」的政策迴應,
但我得到一個解析錯誤,當我試圖從控制檯測試認證器,
以下是我的請求日誌 -

Execution log for request test-request 
Thu Jun 29 11:48:10 UTC 2017 : Starting authorizer: 1o3dvk for request: test-request 
Thu Jun 29 11:48:10 UTC 2017 : Incoming identity: **************************cfef96 
Thu Jun 29 11:48:10 UTC 2017 : Endpoint request URI: https://lambda.ap-southeast-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:ap-southeast-1:855399270504:function:um_guestSessionAuthoriser/invocations 
Thu Jun 29 11:48:10 UTC 2017 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=*********************************************************************************************************************************************************************************************************************************************************************************************************************************************751e60, X-Amz-Date=20170629T114810Z, x-amzn-apigateway-api-id=z6t3cv0z4m, X-Amz-Source-Arn=arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/authorizers/1o3dvk, Accept=application/json, User-Agent=AmazonAPIGateway_z6t3cv0z4m, X-Amz-Security-Token=FQoDYXdzEHQaDOcIbaPscYGsl1wF4iLBAxzOTpZlR2r3AO3g96xwhRuQjEhU9OjOaRieBWQPeosNqv53aGKnBTT2CmkrVzHo3UqOdT1eakuS7tAXAbEcUIHVheWpBnvxqTkaPcknRL7QE79RSqVeryoXo2R1Kmk0Q9Iq+JGFlOJYQQJqvY/hcUg189xqbpTGrhZjcA+pjuSp+M9D97Kce0VP0e3peu/YvON0eGvUlj59MAJAwGVPIzplMKTDFrFg5NKEj79RSxNrNE8y4bAebOwlD8xLv649Zny7++xlMBBwHqMNHu3K9lFXSnKY9DHf6kvezZmpoFB2uu8WbrpInH0eQ/bIAd [TRUNCATED] 
Thu Jun 29 11:48:10 UTC 2017 : Endpoint request body after transformations: {"type":"TOKEN","methodArn":"arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/null/GET/","authorizationToken":"0c34ba00bde34200b383abe22bcfef96"} 
Thu Jun 29 11:48:10 UTC 2017 : Sending request to https://lambda.ap-southeast-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:ap-southeast-1:855399270504:function:um_guestSessionAuthoriser/invocations 
Thu Jun 29 11:48:21 UTC 2017 : Authorizer result body before parsing: {"principalId":"user","policyDocument":{"version":"2012-10-17","statement":[{"resource":"arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/null/GET/","action":"execute-api:Invoke","effect":"Allow"}]}} 
Thu Jun 29 11:48:21 UTC 2017 : Execution failed due to configuration error: Could not parse policy: {"version":"2012-10-17","statement":[{"resource":"arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/null/GET/","action":"execute-api:Invoke","effect":"Allow"}]} 
Thu Jun 29 11:48:21 UTC 2017 : AuthorizerConfigurationException 

我的lambda函數使用Java和我已經建立和使用AA POJO類(setter方法的getter類)
美化拉姆達響應我的政策看起來像如下後返回的政策 -

{ 
    "principalId": "user", 
    "policyDocument": { 
     "version": "2012-10-17", 
     "statement": [{ 
      "resource": "arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/null/GET/", 
      "action": "execute-api:Invoke", 
      "effect": "Allow" 
     }] 
    } 
} 

我想知道爲什麼它不能解析我的迴應?
按勸我試圖利用響應IAM策略,
我用com.google.gson.annotations.SerializedName進口@SerializedName,並能得到下面的輸出 -

{ 
    "principalId": "user", 
    "policyDocument": { 
     "version": "2012-10-17", 
     "statement": [{ 
      "effect": "Deny", 
      "action": ["execute-api:Invoke"], 
      "resource": ["arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/null/GET/"] 
     }] 
    } 
} 

但它看起來像一個很奇怪的之間發生的我的lambda響應和API網關,
變量正在內部降低到某個地方,
而且我仍然得到相同的解析錯誤,
它是否接受響應我ñ其他格式?字符串也沒有工作。

我還應該嘗試什麼?我的政策格式錯了嗎?
我有兩個不同的策略格式從這些網站 -
1. http://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom-authorizer.html
2. https://aws.amazon.com/blogs/compute/introducing-custom-authorizers-in-amazon-api-gateway/

回答

4

你的策略屬性需要適當的資本。相反的:

{ 
    "principalId": "user", 
    "policyDocument": { 
     "version": "2012-10-17", 
     "statement": [{ 
      "resource": "arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/null/GET/", 
      "action": "execute-api:Invoke", 
      "effect": "Allow" 
     }] 
    } 
} 

應該是:

{ 
    "principalId": "user", 
    "PolicyDocument": { 
     "Version": "2012-10-17", 
     "Statement": [{ 
      "Resource": "arn:aws:execute-api:ap-southeast-1:855399270504:z6t3cv0z4m/null/GET/", 
      "Action": "execute-api:Invoke", 
      "Effect": "Allow" 
     }] 
    } 
} 

還不如用 「PrincipalId」,以保持一致性。

相關問題