2017-04-26 133 views
2

我有一個AWS網關API,它被配置爲由AWS_IAM授權,我使用Cognito身份池對用戶進行身份驗證,並且此API被配置爲觸發lambda函數。lambda函數中的AWS身份信息

現在,當調用lambda函數時,我能夠通過event參數傳遞給lambda表達式的requrestContext對象中的identityId和identityPoolId。我的問題是如何從lambda函數中獲取用戶的信息(來自cognito用戶池或任何其他身份提供者,如Facebook,Google等)?爲了將用戶的信息包含在事件參數中,我需要做什麼配置?或者我應該使用某種AWS SDK功能?
這是我在事件參數收到的RequestContext:

{ 
    requestContext:{ 
     accountId:'1234567890', 
     resourceId:'abcdef', 
     stage:'test', 
     requestId:'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 
     identity:{ 
     cognitoIdentityPoolId:'us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 
     accountId:'1234567890', 
     cognitoIdentityId:'us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 
     caller:'ABCDEFGHIJKLMNOPQRSTUV:CognitoIdentityCredentials', 
     apiKey:null, 
     sourceIp:'0.0.0.0', 
     accessKey:'ABCDEFGHIJKLMNOPQRSTUV', 
     cognitoAuthenticationType:'authenticated', 
     cognitoAuthenticationProvider:'cognito-idp.us-west-2.amazonaws.com/us-west-2_xxxxxxxxx,cognito-idp.us-west-2.amazonaws.com/us-west-2_xxxxxxxxx:CognitoSignIn:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 
     userArn:'arn:aws:sts::1234567890:assumed-role/xxx-role/CognitoIdentityCredentials', 
     userAgent:'axios/0.16.1', 
     user:'ABCDEFGHIJKLMNOPQRSTUV:CognitoIdentityCredentials' 
     }, 
     resourcePath:'/users', 
     httpMethod:'GET', 
     apiId:'xxxxxxxx' 
    } 
} 

回答

0

您可以使用您的拉姆達從裏面的Cognito訪問關鍵get the user information

+0

但我沒有發送帶有請求的令牌,如果是例如Facebook身份呢? – Sami

0

Cognito用戶池。

當某人成功通過用戶池進行身份驗證Cognito發出訪問令牌,身份令牌和刷新令牌時 - 身份令牌將包含您允許應用從用戶池屬性訪問的所有信息。

身份池(聯合登錄/ Facebook的等)

當您從前端收到Facebook的令牌,你需要調用fb.api(「/我」),以獲取用戶信息在後端。

我剛剛完成了一個類似的問題,所以這裏是我的建議。就我個人而言,我會編寫自己的授權機制,並使用您想要的用戶信息發佈自己的JWT令牌。

的原因是,你不能讓一個Cognito JWT令牌聯合身份,將與在Cognito authoriser和端點工作 - 我相信這是在路線圖上(雖然我並不瞭解任何東西特別是在AWS內部進行)。

基本上,如果您同時使用用戶池和聯合身份驗證,則需要一種持續共享用戶信息的方法(正如您現在要做的那樣),因此發佈您自己的JWT是最簡單的解決方案。