2017-02-28 41 views
1

我正在使用Lambda函數,使用Cognito用戶池授權器通過API網關執行。Lambda Cognito用戶池授權人 - 我可以自動獲取自定義用戶屬性嗎?

我知道我可以從event.requestContext.authorizer.claims獲得「標準」用戶屬性(如sub,email,cognito:username等)。

但是這不包括自定義用戶屬性(如custom:myAttribute)。

我知道我可以通過adminGetUser得到他們,這個工程,但我想知道我是否可以保存這個電話,並以某種方式自動獲取這些自定義屬性event

+0

我在我的代理lambda中獲取event.requestContext.authorizer.claims,如何獲得對http代理中事件或授權者對象訪問的訪問權限,我想將用戶名作爲標題發送到我的服務器。請幫忙 –

回答

1

你已經看過這個文檔的自定義索賠? http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html。 您將需要定製以下方式來定義上下文屬性:

{ 
    "context" : { 
     "role" : "$context.authorizer.claims['custom:myAttribute']" 
    } 
} 
+0

好吧,我想這意味着我不能使用「Lambda代理集成」,我需要編寫我自己的身體映射模板? 如果是,是否有標準模板可以複製並添加我的自定義屬性,以便Lambda函數的工作方式與之前完全相同(即使用「代理集成」)? – thomers

+0

嗯所以我再次檢查了一個方法與Lambda代理集成(基本上不變,我上面描述的場景),一個與身體映射模板。原來沒有區別 - 兩者都包含「authorizer.claims」中的自定義屬性... ... 因此,無論我之前是否失明,還是其他方面發生了變化。 我會繼續監測這個問題,並用任何新的啓示進行更新。 – thomers

+0

更新:它仍然像魅力一樣工作。不知道爲什麼它以前沒有工作。 – thomers

0

在添加自定義屬性到Cognito用戶游泳池和值分配給它的用戶有幾個原因,它獲得不會出現在requestContext.authorizer.claims集合中。

第一個也是最明顯的是,您需要通過您使用的應用程序客戶端來使自定義屬性可讀,以生成您正在進行身份驗證的ID令牌。如果您使用的是AWS控制檯,則通過導航至App Clients -> Show Details -> Set attribute read and write permissions完成此操作,然後勾選您想讓Lambda可見的屬性。

即使您已完成第一步,您的屬性沒有出現的第二個原因是用戶的聲明在您生成的ID令牌中被編碼。這意味着如果您在使屬性可讀之前創建了一個ID令牌,您仍然不會看到它們。解決此問題的方法是僅爲您的用戶生成新的ID令牌,然後您應該在Lambda的請求上下文中看到這些屬性。

相關問題