1

我正在使用「Cognito用戶池授權人」(沒有「AWS_IAM」選項,沒有自定義編碼的授權人)通過API網關將HTTPS作爲HTTPS調用Lambda方法。爲什麼在Lambda中未收到Cognito自定義屬性

在Lambda上,我通過adminUpdateUserAttributes在某些情況下設置了自定義用戶屬性custom:partnerId

我可以驗證它是否已通過Cognito用戶池AWS控制檯正確設置。

在iOS客戶端,我也可以成功地得到所有用戶屬性(包括自定義的)作爲How to get Cognito user pool "sub" attribute on iOS

的問題,我的答案描述是這樣的:

我沒有收到這個自定義在LAMBDA屬性爲 event.requestContext.authorizer.claims['custom:partnerId']下一個API請求

直到我強制用戶登錄,再次明確(含用戶名/密碼)的iOS客戶端。

在完成這個明確的登錄後,我會收到包含在authorizer.claims參數中的自定義屬性。

我不知道這是否是API網關問題(因爲我認爲它是通過HTTP「Authorization」頭獲取Cognito用戶),iOS Cognito SDK的問題或Lambda本身的問題。

+1

API網關只是從Cognito獲取上下文變量。由於自定義屬性是當用戶再次登錄時出現的,我認爲這與Cognito有關。 Cognito有人應該能夠回答。 – Balaji

回答

2

API網關中的Cognito User Pool Authorizer使用Cognito發佈的Id令牌。此Id令牌有效期爲1小時,並通過內部調用Cognito刷新API自動被iOS SDK刷新。刷新後,Id令牌將具有最新值。 Refresh方法在高級SDK中不可用,因爲它由SDK隱式調用。但是你可以使用低級SDK並直接調用刷新API,這會給你最新的Id令牌。 (我是Cognito團隊的開發人員,並將此作爲功能請求以允許從高級SDK刷新)。

+0

謝謝Vinay!您能否解釋一下我可以使用什麼「低級別SDK調用」進行刷新,直到有高級方法可用? – thomers

+1

這是要調用的API: http://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html 這是低級iOS SDK方法: http:///docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSCognitoIdentityProviderInitiateAuthRequest.html 如果您還有其他問題,我可以諮詢我們的團隊中的iOS專家。 –

+0

嗨@VinayKushwaha - 你可以請解釋你的答案多一點,我期待發送一個自定義字段在每個http代理調用(API網關),使用「$ context.authorizer.claims.property」\t正文映射。 (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference) 即使刷新後我能否做到這一點令牌已完成? - thanx提前 –

相關問題