- 安全、身分和合規›
- Amazon Cognito›
- 常見問答集
Amazon Cognito 常見問答集
一般問題
什麼是 Amazon Cognito?
藉助 Amazon Cognito,您可以在幾分鐘內將使用者註冊、登入、存取控制以及代理 AWS 服務存取權新增至您的 Web 和行動應用程式。它是以開發人員為中心、經濟高效的服務,提供安全、基於租用戶的身分儲存和聯合選項,可擴展到服務數百萬使用者。Amazon Cognito 可協助您建立品牌客戶體驗、提高安全性,以及依據客戶需求進行調整。例如,它支援使用社交身分供應商登入,以及使用 WebAuthn 通行密鑰或 SMS 和電子郵件一次性密碼進行無密碼登入。Amazon Cognito 支援各種合規標準,依據開放身分標準執行,並且整合大量開發資源和 SDK 程式庫。
藉助 Amazon Cognito,您可以專注於建立絕佳的應用程式體驗,而不用擔心如何建置、保護和擴展解決方案來處理使用者管理和身分驗證。
如何開始使用 Amazon Cognito?
瀏覽 AWS Console 即可輕鬆地開始使用。如果沒有 Amazon Web Services 帳戶,則可在登入主控台時建立帳戶。建立用於使用者管理的使用者集區或用於聯合身分的身分集區之後,您就可以將自己的應用程式和 API 與 OAuth 和 OpenID Connect (OIDC) 整合。
如需詳細資訊,請參閱我們的入門資源。
誰應該使用 Amazon Cognito?
Amazon Cognito 是專為要將使用者管理和同步功能新增到行動應用程式和 Web 應用程式的開發人員所設計。開發人員可使用 Cognito Identity 將註冊和登入功能新增到他們的應用程式,便於使用者安全地存取其應用程式的資源。Cognito 也能讓開發人員同步多個裝置、平台和應用程式間的資料。
Amazon Cognito 是否會公開伺服器端 API?
是。Cognito 會公開伺服器端 API。您可以直接呼叫這些 API 來建立連接至 Cognito 的自訂界面。伺服器端 API 的相關介紹請參閱開發人員指南。
Amazon Cognito 支援哪些平台?
選用的 AWS Mobile SDK 中包含對 Cognito 的支援,目前支援的平台有 iOS、Android、Unity 和 Kindle Fire。Cognito 還可在適用於 .NET、C++、Go、Java、JavaScript、PHP v3、Python、Ruby v3 和命令列界面的 AWS SDK 中使用。
請造訪我們的資源頁面以檢視和下載可用的 SDK。
是否一定要使用 AWS Mobile SDK?
否。Cognito 會以 Web 服務的方式公開其控制和資料 API。您可以實作自己的用戶端程式庫直接呼叫伺服器端 API。
將註冊和登入功能新增至您的 Web 和行動應用程式
Amazon Cognito 支援哪些形式的身分驗證?
對於第一要素驗證器,Amazon Cognito 支援使用者名稱/密碼、電子郵件 OTP 無密碼、SMS OTP 無密碼和 WebAuthn 通行密鑰。Cognito 支援下列多重要素驗證器 (MFA):電子郵件 OTP、SMS OTP 和 TOTP 驗證器。此外,客戶和合作夥伴可以使用 AWS Lambda 延伸,藉助自訂身分驗證流程實作對第三方產品和專屬驗證器的支援。
是否可以讓自己的身分供應商來支援使用者註冊和登入?
是,使用 Amazon Cognito 即可輕鬆安全地將註冊和登入功能新增到您的應用程式。您的使用者可以使用電子郵件、電話號碼或使用者名稱來註冊和登入。您也可以實作增強的安全功能,如電子郵件驗證、電話號碼驗證和多重因素認證。Cognito 可讓您自訂工作流程,例如,透過 AWS Lambda 將應用程式特定邏輯新增到使用者註冊以偵測詐騙和驗證使用者。若要進一步了解相關資訊,請瀏覽我們的文件。
什麼是 Amazon Cognito 使用者集區?
使用者集區是可針對 Web 應用程式和行動應用程式設定的租用戶式使用者目錄。使用者集區安全地儲存您的使用者設定檔屬性,並支援自訂結構描述。您可以使用 AWS Console、AWS CLI 或 AWS 開發套件來建立和管理使用者集區。
Amazon Cognito 支援哪些使用者設定檔資訊?
開發人員可使用標準 OpenID Connect 使用者設定檔屬性 (如使用者名稱、電話號碼、地址、時區等等) 或透過自訂方式來新增應用程式特定的使用者屬性。
我可以讓應用程式的使用者利用電子郵件地址或電話號碼註冊或登入嗎?
是否可以設定密碼政策?
是,設定或配置使用者集區時,您可以設定密碼政策,如密碼的長度、字元的負載型和密碼歷史資料要求。此外,Amazon Cognito 支援在每次使用者註冊、登入和變更密碼時檢查洩露的憑證,以確保使用者沒有使用已在其他網站中洩露的密碼登入。
是否可以驗證應用程式使用者的電子郵件地址和電話號碼?
是,使用 Amazon Cognito 時,您可以要求先驗證使用者的電子郵件地址和電話號碼,才提供他們對您應用程式的存取權。註冊時,系統會傳送驗證碼到使用者的電話號碼或電子郵件地址,而使用者必須輸入該驗證碼才能完成註冊並確認。
Amazon Cognito 是否支援以 SMS 為基礎的多重要素驗證 (MFA)?
是,您可以讓應用程式的最終使用者透過以 SMS 為基礎的 MFA 來登入。啟用以 SMS 為基礎的 MFA 時,系統會提示使用者輸入密碼 (第一重關卡 – 他們知道的資訊),以及只能在手機上接收且以 SMS 傳送的安全碼 (第二重關卡 – 他們擁有的資訊)。
是否能夠自訂使用者註冊和登入工作流程?
是,您可以使用 AWS Lambda 自訂註冊和登入流程。舉例來說,您可以建立 AWS Lambda 函數來識別詐騙或對使用者資料執行額外的驗證。您能夠在註冊前、確認後 (註冊)、驗證前、驗證期間和驗證後觸發自訂 Lambda 函數。您也可以使用 Lambda 函數來自訂訊息,隨電子郵件或電話號碼驗證及多重驗證傳送。
我是否可以記住 Cognito 使用者集區中與應用程式使用者關聯的裝置?
可以,您可以選擇記住用來存取應用程式的裝置,並將這些記住的裝置與 Cognito 使用者集區中的應用程式使用者關聯。當您設定多重要素驗證時,可選擇使用記住的裝置抑制使用者的第二要素挑戰 (調整式身份驗證)。
如何將現有應用程式使用者遷移到 Amazon Cognito 使用者集區?
目前有兩種方法可以將使用者從應用程式的現有使用者目錄或資料庫移轉到使用者集區:即時 (JIT) 移轉和批次移轉。
Amazon Cognito 可使用內建 AWS Lambda 觸發程式,協助您在使用者登入應用程式時即時進行移轉。內建 Lambda 觸發程式可讓您在從外部系統移轉使用者資料時,不用強制他們重設密碼。
或者,您可以上傳內含所有應用程式使用者設定檔資料的 CSV 檔案,大批移轉使用者。您可以透過 Amazon Cognito 主控台、API 或 AWS CLI 上傳 CSV 檔案。首次登入時,使用者必須驗證其帳戶,並使用傳送至電子郵件地址或電話號碼的驗證碼來建立新的密碼。
如需進一步了解,請參閱將使用者匯入使用者集區。
啟用 AWS 資源的存取
是否可以使用 Cognito 身分集區來聯合身分及提供對 AWS 資源的安全存取權?
是,Cognito 身分集區可讓您透過外部身分供應商來驗證使用者的身分,並提供臨時安全憑證來存取 AWS 中的應用程式後端資源或 Amazon API Gateway 後的任何服務。Amazon Cognito 可與支援 SAML 或 OpenID Connect 的外部身分供應商、社交身分供應商 (如 Facebook、Twitter、Amazon) 搭配使用,而您也可以整合自己的身分供應商。
Amazon Cognito 身分集區可與哪些公有身分供應商搭配使用?
您可以使用 Amazon、Facebook、Twitter、以 Apple 登入、Google 社交身分供應商、OpenID Connect (OIDC) 身分供應商、SAML 身分供應商、Amazon Cognito 使用者集區和自訂開發人員供應商。
什麼是身分池?
身分集區可讓您為使用者建立唯一的身分,並將其與 AWS 服務供應商安全地聯合。客戶利用 Amazon Cognito 身分集區作為憑證代理程式,以此取得臨時、有限權限的 AWS 憑證來存取 AWS 資源。
使用者可透過 Amazon Cognito 使用者集區、OIDC 身分供應商、SAML 身分供應商或社交身分供應商登入,並取得 AWS 服務的角色式存取權,例如 Amazon S3 儲存貯體或 Amazon DynamoDB 記錄。身分集區不會存放任何使用者設定檔。一個身分集區可以關聯到一個或多個應用程式。如果您為兩個應用程式使用兩個不同的身分集區,則同一個最終使用者在每個身分集區中會有不同的唯一識別符。
登入流程如何與公有身分供應商搭配使用?
行動應用程式會使用供應商的 SDK 與身分供應商 (IdP) 進行驗證。最終使用者與 IdP 進行驗證後,從 IdP 傳回的 OpenID Connect 字符或 SAML 聲明會由應用程式傳遞給 Cognito 身分集區,然後為使用者傳回新的 Cognito ID 和一組有權限限制的臨時 AWS 憑證。
是否可以註冊並驗證自己的使用者?
Cognito 身分集區可與您現有的身分驗證系統整合。您只要呼叫簡單的 API,就能根據自己的使用者唯一識別符為最終使用者擷取 Cognito ID。擷取 Cognito ID 和 OpenID 字符後,您可以使用 Cognito 身分集區用戶端 SDK 來存取 AWS 資源和同步使用者資料。
Cognito Identity 如何協助我控制許可和安全地存取 AWS 服務?
Cognito 身分集區會為您的使用者指派一組有權限限制的臨時憑證,用於存取 AWS 資源,因此您不需使用自己的 AWS 帳戶憑證。每個使用者許可都是透過您建立的 AWS IAM 角色進行控制。您可以定義規則為每個使用者選擇 IAM 角色,或者,如果您使用 Cognito 使用者集區中的群組,則可根據群組指派 IAM 角色。Cognito 身分集區也允許您為未經身分驗證的訪客使用者定義具備有限許可的個別 IAM 角色。此外,您可以使用 Cognito 為使用者產生的唯一識別符來控制對特定資源的存取。例如,您可以為 S3 儲存貯體建立一個政策,只允許各使用者存取儲存貯體內自己的資料夾。
使用公有身分供應商時,Amazon Cognito 身分集區是否會存放使用者的憑證?
否,您的應用程式會直接與支援的公有身分供應商 (Amazon、Facebook、Twitter、以 Apple 登入、Google、SAML 或 Open ID Connect 相容供應商) 通訊以驗證使用者。Cognito Identity 不會接收或存放使用者憑證。Cognito Identity 使用身分供應商提供的字符為使用者取得唯一識別符,然後使用單向雜湊將它進行雜湊處理,這樣將來即可再次識別相同的使用者,無須存放實際的使用者識別符。
Cognito 身分集區是否會從身分供應商接收或存放與我的使用者相關的機密資訊?
否。Cognito Identity 不會收到來自身分供應商的任何機密資訊 (例如電子郵件地址、朋友清單等)。
如果我不想強制使用者登入,會發生什麼情況?
Cognito 身分集區支援未驗證身分使用者和已驗證身分使用者的建立和字符販售程序。這樣無須為應用程式設計額外的登入螢幕,但仍然讓使用者使用有權限限制的臨時登入資料存取 AWS 資源。
使用 Cognito Identity 時,是否仍需要自有的後端身分驗證系統?
否。Cognito Identity 支援透過 Amazon、Facebook、Twitter、Digits 和 Google 進行登入,同時還支援未驗證的使用者。使用 Cognito Identity,不須編寫任何後端程式碼即可支援聯合身份驗證、設定檔資料同步存放區以及 AWS 存取字符分發。
什麼是未驗證的使用者?
未驗證的使用者是指未通過任何身分供應商的驗證,而以訪客身分存取應用程式的使用者。您可以為這些使用者定義個別的 IAM 角色,以提供有限的許可來存取您的後端資源。
Cognito 身分集區是否支援使用相同裝置的不同使用者擁有個別的身分?
是,Cognito 身分集區支援一個裝置多個身分,例如家裡面的 iPad。每個身分獨立處理,同時您能完全掌握使用者登入和登出應用程式的情況,以及本機和遠端應用程式資料的存放方式。
如何存放與 Cognito 身分集區關聯的資料?
您可以透過程式設計方式建立與 Cognito 身分集區關聯的資料集,然後以鍵值/值組的形式儲存資料。資料會同時存放在裝置本機和 Cognito Sync 存放區。Cognito 也可以將這些資料同步到最終使用者的所有裝置上。
是否可以透過 Cognito 身分集區主控台的身分數量知道有多少使用者正在使用我的應用程式?
Cognito 身分集區主控台的身分數量顯示透過 Cognito 身分集區 API 建立了多少個身分。如果是已驗證身分 (使用 Facebook 或 OpenID Connect 供應商等登入供應商登入),對 Cognito 身分集區的 GetId API 的每個呼叫僅會為每個使用者建立一個身分。不過,如果是未驗證身分,每次應用程式中的用戶端呼叫 GetId API 時都會產生一個新的身分。因此,如果您的應用程式針對單一使用者多次為未驗證身分呼叫 GetId,則會看起來像是單一使用者具有多個身分。因此,務必在使用未驗證身分時從 GetId 快取回應,不要為每個使用者多次呼叫它。
Mobile SDK 提供自動快取 Cognito 身分集區資料的邏輯,因此您無需擔心。如果您正在為應用程式尋找完備的分析解決方案,包含追蹤唯一使用者的功能,則請考慮 Amazon Mobile Analytics。
定價
Amazon Cognito 使用者集區如何計費?
什麼是每月作用中使用者 (MAU)?
您可以根據每月作用中使用者 (MAU) 支付 Amazon Cognito 使用者集區費用。如果您的應用程式在日曆月針對該使用者產生身分操作,例如管理建立或更新、註冊、登入、登出、字符重新整理、密碼變更、使用者帳戶屬性更新,或者使用者屬性查詢 (AdminGetUser API),則該使用者會計為一個 MAU。您無須為該日曆月中的後續工作階段或非作用中使用者付費。一般來說,使用者總數及操作次數會明顯大於 MAU 的總數。
Amazon Cognito Sync 如何計費?
如需 Amazon Cognito Sync 定價,請參閱 Amazon Cognito 定價頁面。
使用 SMS 訊息搭配 Cognito 的費用為何?
使用 SMS 簡訊來驗證電話號碼、傳送忘記密碼或重設密碼的代碼,或進行多重因素認證,都需另外收費。請參閱全球 SMS 定價頁面以了解詳細資訊。
什麼是同步操作?
當您使用 AWS Mobile SDK 呼叫 synchronize() 方法時,這就算一次同步操作。如果您直接呼叫伺服器 API,同步操作會在新的同步工作階段字符發出時啟動,並以成功寫入或工作階段字符逾時完成。無論您使用 SDK synchronize() 方法或直接呼叫伺服器 API,同步操作的費用都是相同的。
AWS 免費方案是否包含 Amazon Cognito?
是,Amazon Cognito 使用者集區 SKU 和 Essentials SKU 對前 10,000 個 MAU 免費提供。在 2024 年 11 月 21 日之前擁有作用中 Amazon Cognito 使用者集區的客戶帳戶有資格享受 50,000 個 MAU 的免費方案。
做為 AWS 免費方案的一部分,符合條件的 AWS 客戶可以在前 12 個月中獲得每月 10 GB 的雲端同步存放區和 1,000,000 次同步操作。
使用 Amazon Cognito 身分集區驗證使用者和產生唯一識別符無須付費
使用 Lambda 搭配 Amazon Cognito 事件的費用是多少?
使用 Cognito 事件觸發 Lambda 函數並不收取額外費用,但執行 Lambda 函數時所使用的 AWS Lambda 與其他 AWS 服務會收取正常費用。
如需詳細資訊,請參閱 AWS Lambda 定價頁面。
應用程式的每次讀取或寫入是否都算做一次同步操作?
否。您可決定何時呼叫 synchronize() 方法。裝置的每一次讀取或寫入都是在本機 SQLite 存放區進行。這樣您便可完全掌控成本開支。
推送同步如何計費
Cognito 利用 Amazon SNS 傳送無提示推送通知。使用 Cognito 進行推送同步不會產生額外費用,但傳送至裝置的通知將以正常 Amazon SNS 費率計費。