0

我在使用生成的Javascript SDK對我的API網關GET請求做出響應的x-amzn-errortype標題中遇到403狀態碼,其中UnrecognizedClientException。被調用的資源利用IAM Auth,根據用戶組區分用戶角色。AWS API網關具有生成的Javascript SDK的UnrecognizedClientException

這裏是我的API客戶端初始化函數

function initializeAPIClient(accessKey, secretKey, sessionToken){ 
    var config = { 
     region : region, 
     accessKey : accessKey, 
     secretKey : secretKey, 
     sessionToken : sessionToken 
    } 
    apigClient = apigClientFactory.newClient(config); 
} 

這裏是我的GET請求功能

function testCall(){ 
    var params = ''; 
    var body = ''; 
    var additionalParams = ''; 

    apigClient.testCallGet(params, body, additionalParams) 
    .then(function(result){ 
     alert("Permissions are available to this user."); 
    }) 
    .catch(function(result){ 
     alert("Permissions are NOT available to this user."); 
    }); 
} 

這裏是我的請求頭:

:authority:[API_ENDPOINT] 
:method:GET 
:path:/[STAGE]/[RESOURCE] 
:scheme:https 
accept:application/json 
accept-encoding:gzip, deflate, sdch, br 
accept-language:en-US,en;q=0.8 
authorization:AWS4-HMAC-SHA256 Credential=[ACCESS_KEY_ID]/20170406/[REGION]/execute-api/aws4_request, SignedHeaders=accept;host;x-amz-date, Signature=[SIGNATURE] 
origin:http://localhost:8000 
referer:http://localhost:8000/php/[PAGE].php/?username=[USERNAME]&sessionToken=[SESSION_TOKEN] 
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 
x-amz-date:20170406T180808Z 
x-amz-security-token:[SESSION_TOKEN] 

我不知道是什麼可能會造成這種情況。當我搜索UnrecognizedClientException時推薦的解決方案似乎建議做我已經做的事情。

+1

你是如何生成訪問密鑰和密鑰的?該區域是否與您的API網關API區域匹配? –

+0

嗨馬克,我想你也回答了我的AWS論壇問題,但我會在此發佈一個答案以保持一致性。基本上它是我的id令牌作爲會話令牌的使用,最終成爲我的邏輯中的錯誤,這在上面的代碼中沒有說明。 –

回答

0

我已經解決了我自己的問題,所以這裏是任何遇到類似邏輯錯誤的人的答案。不要將Id令牌用作會話令牌,這正是我正在做的。 id令牌用於生成會話令牌以及訪問密鑰和密鑰。不要混淆兩者。