使用 Amazon Cognito 份對用户進行身份驗證 - AWS SDK for JavaScript

我們宣布即將推出 end-of-support AWS SDK for JavaScript v2。建議您遷移至 AWS SDK for JavaScript v3。如需日期、其他詳細資訊和如何遷移的資訊,請參閱連結公告。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Cognito 份對用户進行身份驗證

推薦的方法來獲得AWS您的瀏覽器腳本的憑據是使用 Amazon Cognito 身份證書對象,AWS.CognitoIdentityCredentials。Amazon Cognito 支持通過第三方身份提供商對用户進行身份驗證。

若要使用 Amazon Cognito 身分,您必須先在 Amazon Cognito 主控台中建立身分集區。身分集區代表應用程式提供給使用者的身分群組。提供給使用者的身分會專門識別每個使用者帳户。Amazon Cognito 身分不是憑證。它們使用 AWS Security Token Service (AWS STS) 中支援的 Web 聯合身分來交換登入資料。

Amazon Cognito 可以幫助您在多個身分供應商中使用AWS.CognitoIdentityCredentials物件。接著,會將載入的身分交換為在 AWS STS 中的登入資料。

配置亞 Amazon Cognito 份證書對象

如果您尚未建立身分集區,請在Amazon Cognito 主控台,然後再配置AWS.CognitoIdentityCredentials。為身分集區同時建立經授權和未經授權的 IAM 角色並將其建立關聯。

未經授權的使用者的身分未經驗證,因此這個角色適用於您應用程式的訪客使用者,或使用者身分是否已驗證並不重要的情況。已驗證使用者透過驗證其身分的第三方身分供應商來登入應用程式。請務必適當地限制資源許可範圍,以避免從未經授權的使用者授與資源的存取權。

在您以連接的身分供應商設定身分集區之後,您可以使用 AWS.CognitoIdentityCredentials 來驗證使用者。若要設定您的應用程式登入資料使用 AWS.CognitoIdentityCredentials,請將 credentials 屬性設定為 AWS.Config 或每個服務的組態。以下範例使用 AWS.Config

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030', Logins: { // optional tokens, used for authenticated login 'graph.facebook.com': 'FBTOKEN', 'www.amazon.com': 'AMAZONTOKEN', 'accounts.google.com': 'GOOGLETOKEN' } });

選用的 Logins 屬性是身分供應商名稱與這些身分供應商的身分權杖的對應。您從身分供應商取得權杖的方式,取決於您使用的供應商。例如,如果 Facebook 是您的身分供應商之一,您可以使用 FB.loginFacebook 開發套件 函數來取得身分供應商權杖:

FB.login(function (response) { if (response.authResponse) { // logged in AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030', Logins: { 'graph.facebook.com': response.authResponse.accessToken } }); s3 = new AWS.S3; // we can now create our service object console.log('You are now logged in.'); } else { console.log('There was a problem logging you in.'); } });

將未經驗證的使用者切換為經驗證的使用者

Amazon Cognito 可支援已驗證和未驗證的使用者。未驗證的使用者即使沒有以任何身分供應商登入,也能存取您的資源。這個程度的存取能在使用者登入前就顯示內容,非常有用。每個未驗證使用者在 Amazon Cognito 中都有專屬身分 (即使使用者尚未個別登入和驗證身分亦同)。

最初未驗證的使用者

使用者通常會以未經驗證的角色開始,您會為該角色設定組態物件的登入資料屬性,而不使用 Logins 屬性。在這種情況下,您的預設組態可能如下所示:

// set the default config object var creds = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030' }); AWS.config.credentials = creds;

切換到已驗證使用者

當未驗證使用者登入身分供應商,且您有一個字符時,您可以透過呼叫自訂函數更新登入資料物件並新增 Logins 字符,將使用者從未驗證切換為已驗證:

// Called when an identity provider has a token for a logged in user function userLoggedIn(providerName, token) { creds.params.Logins = creds.params.Logins || {}; creds.params.Logins[providerName] = token; // Expire credentials to refresh them on the next request creds.expired = true; }

您也可建立 CognitoIdentityCredentials 物件。如果您建立此物件,您必須為建立的任何現有服務物件重設登入資料屬性。服務物件僅會在物件初始化時從全域組態進行讀取。

如需有關的詳細資訊CognitoIdentityCredentials對象,請參閲AWS.CognitoIdentityCredentials中的AWS SDK for JavaScriptAPI 參考。