開始使用 Amazon Cognito

問:什麼是 Amazon Cognito?
Amazon Cognito 可讓您輕鬆地將使用者註冊和身份驗證新增到行動應用程式與 Web 應用程式。Amazon Cognito 也可讓您透過外部身分供應商驗證使用者,並提供暫時安全登入資料來存取 AWS 中的應用程式後端資源或 Amazon API Gateway 後的任何服務。Amazon Cognito 可與支援 SAML 或 OpenID Connect 的外部身分供應商、社交身分供應商 (如 Facebook、Twitter、Amazon) 搭配使用,而您也可以整合自己的身分供應商。

此外,Amazon Cognito 可讓您同步使用者裝置間的資料,因此當他們切換裝置或升級到新裝置時,能維持一致的應用程式體驗。您的應用程式可將資料儲存在使用者的本機裝置上,即使裝置離線,應用程式也能運作,並在裝置重新連線時自動同步資料。

有了 Amazon Cognito,您可以專注在建立絕佳的應用程式體驗,而不用擔心如何建置、保護和擴展解決方案來處理使用者管理、身份驗證及跨平台和裝置同步。

問:誰應該使用 Amazon Cognito?
Amazon Cognito 是專為要將使用者管理和同步功能新增到行動應用程式和 Web 應用程式的開發人員所設計。開發人員可使用 Cognito Identity 將註冊和登入功能新增到他們的應用程式,便於使用者安全地存取其應用程式的資源。Cognito 也能讓開發人員同步多個裝置、平台和應用程式間的資料。

問:如何開始使用 Amazon Cognito?
瀏覽 AWS 主控台即可輕鬆地開始使用。如果沒有 Amazon Web Services 帳戶,則可在登入主控台時建立一個帳戶。針對使用者管理建立使用者集區或為聯合身分或同步操作建立身分集區之後,您可以下載 AWS Mobile SDK 並將它與您的應用程式整合。或者,也可以直接呼叫 Cognito 伺服器端 API 而不使用 SDK。請參閱我們的開發人員指南以了解詳細資訊。

問:Amazon Cognito 是否會公開伺服器端 API?
是。Cognito 會公開伺服器端 API。您可以直接呼叫這些 API 來建立連接至 Cognito 的自訂界面。伺服器端 API 的相關介紹請參閱開發人員指南。

問:Amazon Cognito 支援哪些平台?
選用的 AWS Mobile SDK 中包含對 Cognito 的支援,目前支援的平台有 iOS、Android、Unity 和 Kindle Fire。另外,適用於 JavaScript 的 AWS 開發套件中也包含 Cognito。適用於 iOS 和 Android 的 AWS Mobile SDK 以及適用於 Cognito 的 JavaScript AWS 開發套件目前支援 Cognito 您的使用者集區。請瀏覽我們的資源頁面以下載開發套件。

問:是否一定要使用 AWS Mobile SDK?
否。Cognito 會以 Web 服務的方式公開其控制和資料 API。您可以實作自己的用戶端程式庫直接呼叫伺服器端 API。

 

問:是否可以讓自己的身分供應商來支援使用者註冊和登入?

是,使用 Cognito Identity 即可輕鬆安全地將註冊和登入功能新增到您的應用程式。您的使用者可以使用電子郵件、電話號碼或使用者名稱來註冊和登入。您也可以實作增強的安全功能,如電子郵件驗證、電話號碼驗證和多重驗證。Cognito Identity 也能讓您自訂工作流程,例如,透過 AWS Lambda 將應用程式特定邏輯新增到使用者註冊以偵測詐騙和驗證使用者。若要進一步了解相關資訊,請瀏覽我們的文件。

問:什麼是使用者集區?

使用者集區是可針對 Web 應用程式和行動應用程式設定的使用者目錄。使用者集區可安全地存放使用者的設定檔屬性。您可以使用 AWS 主控台、AWS CLI 或 AWS 開發套件來建立和管理使用者集區。

問:Cognito Identity 支援哪些使用者設定檔資訊?

開發人員可使用標準 OpenID Connect 使用者設定檔屬性 (如使用者名稱、電話號碼、地址、時區等等) 或透過自訂方式來新增應用程式特定的使用者屬性。

問:我可以讓應用程式的使用者利用電子郵件地址或電話號碼註冊或登入嗎?

可以,您可以使用別名功能,讓使用者利用電子郵件地址和密碼或是電話號碼和密碼註冊或登入。若要進一步了解相關資訊,請瀏覽我們的文件

問:是否可以設定密碼政策?

是,設定或設置使用者集區時,您可以設定密碼政策,如密碼的強度和字元類型要求。

問:是否可以驗證應用程式使用者的電子郵件地址和電話號碼?

是,使用 Cognito Identity 時,您可以要求先驗證使用者的電子郵件地址和電話號碼,才提供他們對您應用程式的存取權。註冊時,系統會傳送驗證碼到使用者的電話號碼或電子郵件地址,而使用者必須輸入該驗證碼才能完成註冊並確認。

問:Cognito Identity 是否支援以 SMS 為基礎的 Multi-Factor Authentication (MFA)?

是,您可以讓應用程式的最終使用者透過以 SMS 為基礎的 MFA 來登入。啟用以 SMS 為基礎的 MFA 時,系統會提示使用者輸入密碼 (第一重關卡 – 他們知道的資訊),以及只能在手機上接收且以 SMS 傳送的安全碼 (第二重關卡 – 他們擁有的資訊)。

問:是否能夠自訂使用者註冊和登入工作流程?

是,使用 AWS Lambda 將應用程式特定邏輯新增至使用者註冊和登入流程,即可自訂註冊和登入。舉例來說,您可以建立 AWS Lambda 函數來識別詐騙或對使用者資料執行額外的驗證。您能夠在註冊前、確認後、身份驗證前、身份驗證自訂挑戰期間和身份驗證後觸發開發人員提供的 Lambda 函數。您也可以使用 Lambda 函數來自訂訊息,隨電子郵件或電話號碼驗證及多重驗證傳送。

問:我可以記住 Cognito 使用者集區中與應用程式使用者關聯的裝置嗎?

可以,您可以選擇記住用來存取應用程式的裝置,並將這些記住的裝置與 Cognito 使用者集區中的應用程式使用者關聯。當您設定多重驗證時,可選擇使用記住的裝置抑制使用者的第二重挑戰。

問:如何將現有的使用者遷移到 Amazon Cognito 使用者集區?

您可以使用我們的匯入工具,將現有使用者遷移到 Amazon Cognito 使用者集區。系統會從 .csv 檔案匯入使用者屬性值,您可透過主控台、我們的 API 或 CLI 上傳該檔案。當匯入的使用者首次登入時,需使用透過電子郵件地址或電話傳送給他們的代碼確認帳戶並建立新密碼。使用匯入工具無須另外付費。如需進一步了解,請參閱匯入工具文件

匯入工具不會遷移密碼。如果您想要保留使用者目前的密碼,可考慮替代方法,當使用者在轉換期間登入應用程式時,一次遷移一個使用者。使用此方法時,應用程式會先嘗試以 Cognito 使用者集區登入使用者。如果使用者不在使用者集區中,應用程式會以您現有的身分系統登入使用者,並暫時保留用來登入的使用者名稱和密碼。使用者以您現有的身分系統成功登入之後,應用程式就會使用相同的使用者名稱和密碼,在 Cognito 使用者集區建立使用者。此方法需要在轉換期間維護現有的身分系統,但轉換期間結束後,您就可以使用我們的匯入工具匯入其他使用者 (不需要這些使用者的密碼)。 

問:是否可以使用 Cognito Identity 來聯合身分及提供對 AWS 資源的安全存取權?
是,Cognito Identity 也可讓您透過外部身分供應商來驗證使用者,並提供暫時安全登入資料來存取 AWS 中的應用程式後端資源或 Amazon API Gateway 後的任何服務。Amazon Cognito 可與支援 SAML 或 OpenID Connect 的外部身分供應商、社交身分供應商 (如 Facebook、Twitter、Amazon) 搭配使用,而您也可以整合自己的身分供應商。

問:Amazon Cognito Identity 可與哪些公有身分供應商搭配使用?
您可以使用 Amazon、Facebook、Twitter、Digits、Google 和其他任何與 OpenID Connect 相容的身分供應商。

問:什麼是身分集區?
身分集區是 Cognito Identity 用來整理應用程式聯合身分的容器。身分集區與來自社交身分供應商的聯合身分關聯,它們具有唯一的使用者特定身分。身分集區不會存放任何使用者設定檔。一個身分集區可以關聯到一個或多個應用程式。如果您為兩個應用程式使用兩個不同的身分集區,則同一個最終使用者在每個身分集區中會有不同的唯一識別符。

問:登入流程如何與公有身分供應商搭配使用?
行動應用程式會使用供應商的 SDK 與身分供應商 (IdP) 進行驗證。最終使用者與 IdP 進行驗證後,從 IdP 傳回的 OAuth 或 OpenID Connect 字符或 SAML 聲明會由應用程式傳遞給 Cognito Identity,然後為使用者傳回新的 Cognito ID 和一組有權限限制的臨時 AWS 登入資料。

問:是否可以註冊並驗證自己的使用者?
Cognito Identity 可與您現有的身份驗證系統整合。您只要呼叫簡單的 API,就能根據自己的使用者唯一識別符為最終使用者擷取 Cognito ID。擷取 Cognito Identity 提供的 Cognito ID 和 OpenID 字符後,您可以使用 Cognito Identity 用戶端 SDK 來存取 AWS 資源和同步使用者資料。Cognito Identity 是全受管的身分供應商,讓您更容易為行動應用程式和 Web 應用程式實作使用者註冊和登入。

問:Cognito Identity 如何協助我控制許可和安全地存取 AWS 服務?
Cognito Identity 會為您的使用者指派一組有權限限制的臨時登入資料,以用於存取 AWS 資源,因此您不需使用自己的 AWS 帳戶登入資料。每個使用者許可都是透過您建立的 AWS IAM 角色進行控制。您可以定義規則為每個使用者選擇 IAM 角色,或者,如果您使用 Cognito 使用者集區中的群組,則可根據群組指派 IAM 角色。Cognito Identity 也允許您為未經驗證的訪客使用者定義具備有限許可的個別 IAM 角色。此外,您可以使用 Cognito 為使用者產生的唯一識別符來控制對特定資源的存取。例如,您可以為 S3 儲存貯體建立一個政策,只允許各使用者存取儲存貯體內自己的資料夾。

問:使用公有身分供應商時,Amazon Cognito Identity 是否會存放使用者的登入資料?

否,您的應用程式會直接與支援的公有身分供應商 (Amazon、Facebook、Twitter、Digits、Google 或 Open ID Connect 相容供應商) 通訊以驗證使用者。Cognito Identity 不會接收或存放使用者登入資料。Cognito Identity 使用身分供應商提供的字符為使用者取得唯一識別符,然後使用單向雜湊將它進行雜湊處理,這樣將來即可再次識別相同的使用者,無須存放實際的使用者識別符。

問:Cognito Identity 是否會從身分供應商接收或存放與我的使用者相關的機密資訊?
否。Cognito Identity 不會收到來自身分供應商的任何機密資訊 (例如電子郵寄地址、朋友清單等)。

問:使用 Cognito Identity 時,是否仍需要我自己的後端身份驗證系統?
否。Cognito Identity 支援透過 Amazon、Facebook、Twitter、Digits 和 Google 進行登入,同時還支援未驗證的使用者。使用 Cognito Identity,不須編寫任何後端程式碼即可支援聯合身份驗證、設定檔資料同步存放區以及 AWS 存取字符分發。

問:如果我不想強制使用者登入,會發生什麼情況?
Cognito Identity 支援未驗證使用者和已驗證使用者的建立和字符販售流程。這樣無須為應用程式設計額外的登入螢幕,但仍然讓使用者使用有權限限制的臨時登入資料存取 AWS 資源。

問:什麼是未經授權的使用者?
未經驗證的使用者是指未通過任何身分供應商的驗證,而以訪客身分存取應用程式的使用者。您可以為這些使用者定義個別的 IAM 角色,以提供有限的許可來存取您的後端資源。

問:Cognito Identity 是否支援使用相同裝置的不同使用者擁有獨立的身分?
是。Cognito Identity 支援一個裝置多個身分,例如家裡面的 iPad。每個身分獨立處理,同時您能完全掌握使用者登入和登出應用程式的情況,以及本機和遠端應用程式資料的存放方式。

問:如何存放與 Cognito Identity 關聯的資料?
您可以透過程式設計方式建立與 Cognito Identity 關聯的資料集,然後以鍵值/值組的形式儲存資料。資料會同時存放在裝置本機和 Cognito Sync 存放區。Cognito 也可以將這些資料同步到最終使用者的所有裝置上。

問:是否可以透過 Cognito Identity 主控台的身分數量知道有多少使用者正在使用我的應用程式?
Cognito Identity 主控台的身分數量顯示透過 Cognito Identity API 建立了多少個身分。如果是已驗證身分 (使用 Facebook 或 OpenID Connect 供應商等登入供應商登入),對 Cognito Identity 的 GetId API 的每個呼叫只會為每個使用者建立一個身分。不過,如果是未驗證身分,每次應用程式中的用戶端呼叫 GetId API 時都會產生一個新的身分。因此,如果您的應用程式針對單一使用者多次為未驗證身分呼叫 GetId,則會看起來像是單一使用者具有多個身分。所以務必在使用未驗證身分時從 GetId 快取回應,不要為每個使用者多次呼叫它。

Mobile SDK 提供自動快取 Cognito Identity 的邏輯,所以您不用擔心。如果您正在為應用程式尋找完備的分析解決方案,包含追蹤唯一使用者的功能,則請考慮 Amazon Mobile Analytics

問:什麼是 Amazon Cognito Sync 存放區?
Amazon Cognito Sync 存放區是連結到 Amazon Cognito Identity 的鍵值/值組存放區。在身分集區和同步存放區中可以建立任意數量的身分。同步存放區中的每個 Amazon Cognito Identity 都有自己的使用者資訊存放區。

問:資料是否直接儲存到 Amazon Cognito Sync 存放區?
否。選用的 AWS Mobile SDK 會將資料儲存在本機裝置的 SQLite 資料庫中,如此一來應用程式就能一直存取資料。透過呼叫 synchronize() 方法可將資料推送到 Amazon Cognito Sync 存放區,而且如果啟用推送同步,連結到身分的所有其他裝置都將透過 Amazon SNS 收到同步存放區資料變更的通知。

問:資料如何存放到 Amazon Cognito Sync 存放區?
與 Amazon Cognito Identity 關聯的資料會整理成鍵值/值組。鍵值是標籤,例如 "MusicVolume",而數值例如 "11"。鍵值/值組使用資料集分組和分類。資料集是鍵值/值組的邏輯分區,也是 Amazon Cognito 用來執行同步操作的最細小實體。

問:Amazon Cognito Sync 存放區中的使用者資訊存放區大小上限為何?
每個使用者資訊存放區大小上限為 20MB。使用者資訊存放區內的每個資料集可包含最多 1MB 的資料。一個資料集最多可以包含 1024 個鍵值。

問:在資料集中可以存放哪種資料?
資料集中的鍵值和值都是英數字元字串。字串的長度沒有限制,只是資料集中值的總量不可以超過 1MB。二進位資料可以 base64 編碼字串儲存為一個值,該值不可以超過 1MB 的限制大小。

問:為什麼資料集的大小限制為 1MB?
將資料集的大小限制在 1MB 可以提高完成同步工作的成功率,即使頻寬有限,也不會因為一直重試而造成電池壽命和資料方案的浪費。

問:使用者身分和使用者資訊存放區是否會在開發人員間共用?
否,使用者身分和資訊存放區與特定 AWS 帳戶關聯。如果使用 Amazon Cognito 的特定裝置上有出自不同發佈者的多個應用程式,則每個應用程式將使用各自發佈者建立的資訊存放區。

問:如何分析和查詢 Cognito Sync 存放區中存放的資料?
有了 Cognito Streams,您就可以將同步存放區資料推送到 AWS 帳戶中的 Kinesis 串流。然後您可以取用此串流,並將資料以便於您分析的方式存放,例如放在 Amazon Redshift 資料庫、您所擁有的 RDS 執行個體,或甚至是 S3 檔案。我們已經發佈範例 Kinesis 取用者應用程式以展示如何在 Amazon Redshift 存放更新資料。

問:為何我應該使用 Kinesis 串流而不是資料庫匯出?
透過將資料串流傳送到 Kinesis,您可以即時收到資料集的所有變更歷史記錄。這表示您會收到最終使用者對資料集所作的所有變更,並可靈活選擇將此資料存放在哪個工具中。

問:如果已在 Cognito 存放資料,該怎麼辦?
啟用 Kinesis 串流功能後,您就能開始大量發佈。這個程序會將您目前存放在 Cognito Sync 存放區的所有資料以非同步方式傳送到您選取的 Kinesis 串流。

問:此功能的價格為何?
Cognito 會將資料推送到您所擁有的 Kinesis 串流。如果啟用此功能,Cognito 的每次同步價格都會一樣。將按照 Kinesis 的標準費率向您收取碎片的費用。

問:我是否可在儲存前驗證資料?
Amazon Cognito 事件讓開發人員能執行一個 AWS Lambda 函數來回應 Cognito 中的重要事件。同步觸發事件是發生在同步任何資料集時的事件。開發人員可以撰寫一個攔截同步事件的 AWS Lambda 函數。該函數可以評估基礎資料集所作的變更,在資料儲存於雲端之前操作資料,並同步到使用者的其他裝置。或者,AWS Lambda 函數可關閉同步操作,讓資料不會同步到使用者的其他裝置。

問:資料如何與 Amazon Cognito 同步?
您可以程式設計的方式觸發用戶端裝置和 Amazon Cognito Sync 存放區之間的資料集同步,方法是在 AWS Mobile SDK 中使用 synchronize() 方法。synchronize() 方法會讀取 Amazon Cognito Sync 存放區中可用資料的最新版本並將其與本機快取的副本進行比較。比較後,synchronize() 方法會視需要將最新的更新寫入本機資料存放區和 Amazon Cognito Sync 存放區中。根據預設,Amazon Cognito 會保留資料的最後寫入版本。您可以程式設計的方式覆寫這種行為和解決資料衝突。此外,推送同步可讓您使用 Amazon Cognito 向與身分關聯的所有裝置傳送一則無提示推送通知,通知使用者有新的資料可用。

問:什麼是無提示推送通知?
Amazon Cognito 使用 Amazon Simple Notification Service (SNS) 向裝置傳送無提示推送通知。無提示推送通知是指使用者裝置上您應用程式收到的推送訊息,使用者不會看見。

問:如何使用推送同步?
若要啟用推送同步,您需要使用 AWS 管理主控台中的 Amazon SNS 頁面宣告平台應用程式。然後,您可以從 AWS 管理主控台的 Amazon Cognito 頁面中的身分集區頁面,將 SNS 平台應用程式連結到您的 Cognito 身分集區。Amazon Cognito 會自動利用 SNS 平台應用程式向裝置通知變更。

問:如何處理同步過程中的衝突?
根據預設,Amazon Cognito 會保留資料的最後寫入版本。您可以覆寫這種行為,方法是選擇從 AWS Mobile SDK (其中包含資料的兩個版本) 中對回呼進行回應。然後,應用程式可以決定保留哪個版本的資料 (本機的版本或 Amazon Cognito Sync 存放區中的版本) 並將其儲存到 Amazon Cognito Sync 存放區。

問:Cognito Identity 的費用是多少?
使用 Amazon Cognito,您只需按實際用量付費。沒有最低費用,也沒有前期承諾。

如果您使用 Cognito Identity 建立使用者集區,則只需要按照每月作用中使用者 (MAU) 付費。如果日曆月內有相關的使用者身分操作 (例如註冊、登入、字符重新整理和密碼變更),則該使用者會視為一個 MAU。您無須為該日曆月中的後續工作階段或非作用中使用者付費。以下是選擇使用 SMS 簡訊的個別費用。

您的使用者集區功能提供每月 50,000 個 MAU 的免費方案。Cognito Identity 免費方案不會在 AWS 免費方案 12 個月的期限到期後過期,而是無期限地提供給現有和新的 AWS 客戶。

使用 Cognito Identity 時,聯合身分和 AWS 資源的安全存取控制一律免費。

問:Cognito Sync 的費用是多少?
同步費用的計算是根據 Amazon Cognito Sync 存放區中儲存的總資料量以及同步操作執行的次數。同步操作會將裝置上的本機資料存放區和雲端的 Amazon Cognito Sync 存放區做比較,然後同步兩個資料存放區。

做為 AWS 免費方案的一部分,符合條件的 AWS 客戶可以在前 12 個月中獲得每月 10 GB 的雲端同步存放區和 1,000,000 次同步操作。每月超出免費方案的部分,Amazon Cognito 會針對每 10,000 次同步操作收取 0.15 USD 以及每 GB 同步存放區收取 0.15 USD。

問:什麼是同步操作?
當您使用 AWS Mobile SDK 呼叫 synchronize() 方法時,這就算一次同步操作。如果您直接呼叫伺服器 API,同步操作會在新的同步工作階段字符發出後啟動,並以成功寫入或工作階段字符逾時完成。無論您使用 SDK synchronize() 方法或直接呼叫伺服器 API,同步操作的費用都是相同的。

問:什麼是每月作用中使用者 (MAU)?
如果在每月計費期間執行與使用者有關的操作 (例如,登入、字符更新、註冊或密碼變更),使用者就視為作用中,並計為一個 MAU。因此,您不用為每月計費期間的後續操作或非作用中使用者付費。一般來說,使用者總數及操作次數會明顯大於 MAU 的總數。

問:使用 SMS 訊息搭配 Cognito 的費用為何?
使用 SMS 簡訊來驗證電話號碼、傳送忘記密碼或重設密碼的代碼,或進行多重驗證,都需另外收費。請參閱全球 SMS 定價頁面以了解更多資訊。

問:AWS 免費方案是否包含 Amazon Cognito?
是。Cognito 是 AWS 免費方案的一部分,前 12 個月每月提供 10 GB 同步存放區和 1,000,000 次同步操作。Cognito Identity 的您的使用者集區前 50,000 個 MAU 免費,之後我們會提供以量計費的方案。針對使用聯合身分功能以驗證使用者和產生唯一識別符,Cognito Identity 一律不收取費用。

問:應用程式的每次讀取或寫入是否都算做一次同步操作?
否。您可決定何時呼叫 synchronize() 方法。裝置的每一次讀取或寫入都是在本機 SQlite 存放區進行。這樣您便可完全掌控成本開支。

問:推送同步如何計費?
Cognito 利用 Amazon SNS 傳送無提示推送通知。使用 Cognito 進行推送同步不會產生額外費用,但傳送至裝置的通知將以正常 Amazon SNS 費率計費。

問:使用 Lambda 搭配 Amazon Cognito Events 的費用是多少?
使用 Cognito Events 觸發 Lambda 函數並不收取額外費用,但執行 Lambda 函數時所使用的 AWS Lambda 與其他 AWS 服務會收取正常費用。請參閱 AWS Lambda 定價頁面了解詳細資訊。