1

我一直試圖讓Google Sign-In通過JS SDK使用Cognito。我一直在閱讀文檔:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.htmlAWS Cognito - JavaScript身份驗證不起作用

下面的代碼位於我的函數中,一旦我從Google獲得回調,它就會運行。我已經確認我通過Google登錄並擁有access_token。根據文檔,我應該只需要角色名稱,如果該角色是通過cognito配置的,所以它可以自動找出池ID。它是什麼。該函數調用get併成功返回。

現在我不明白的是兩兩件事:

1)我不應該看在我的Cognito池一個新的身份,一旦get方法被調用?我沒有通過認知來看到任何登錄信息。什麼時候應該通過儀表板上的cognito看到登錄信息?

2)嘗試現在使用AWS來訪問特定的資源,例如可能讀取S3存儲桶或者由於Auth而導致某些操作失敗,如果問題#1存在問題,則這是有意義的。

我猜我缺少一些簡單的東西,因爲任何幫助將不勝感激。我也看過這個鏈接:http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring.html並嘗試使用WebIdentityToken,但沒有成功。

AWS.config.region = 'us-east-1'; 
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: '<POOL ID>', 
    Logins: { 
     'accounts.google.com': googleUser.wc.access_token 
    } 
}); 

// Obtain AWS credentials 
AWS.config.credentials.get(function(){ 
    // Credentials will be available when this function is called. 
    var accessKeyId = AWS.config.credentials.accessKeyId; 
    var secretAccessKey = AWS.config.credentials.secretAccessKey; 
    var sessionToken = AWS.config.credentials.sessionToken; 

    console.log("accessKeyId: " + accessKeyId); 

}); 

回答

0

你的實際需要(只要您所配置的未授權和驗證的角色,當你設置你的身份池 - 這是默認值),以指定Identity池ID,而不是角色ARN。請參閱示例代碼http://docs.aws.amazon.com/cognito/devguide/identity/getting-credentials/

請讓我們知道您是否繼續有問題。

+0

我想,也是,我所做的更改到上面的代碼,但是在JS SDK中返回400。即使我刪除了登錄地圖,SDK仍然有400. –

+0

請提供詳細的錯誤消息,您可以看到400以外的地方。還請確保您使用的是Google的ID令牌,如http:// docs所示。 aws.amazon.com/cognito/devguide/identity/external-providers/google/ –

+0

其400 - 錯誤的請求。但隨着你的評論,我能夠挖掘更多,這幫助我找到答案!我將在下面提供答案。感謝斯科特的幫助! –

1

所以問題歸結爲2件事。

就像斯科特說我需要在CognitoIdentityCredentials方法中使用IdentityPoolId和Logins。

第二個是來自谷歌的令牌。它不是AWS需要的訪問令牌,而是id_token!因此,在Google成功回調中,我們獲得了包含id_token的googleUser對象,其中包含一個wc對象。您在登錄字典上使用該標記,並且您已成功登錄!

0

請確保您有「生成客戶端祕密」未選中的AWS-> Cognito-> UserPool-> YourPool-> Apps->添加應用程序 enter image description here