Amazon Cognito 入門

協助您開始使用的文件和資源

Amazon Cognito 使用者集區 – 適用於所有使用者的目錄

您可以快速建立自己的目錄以註冊和登入使用者,並使用 Amazon Cognito 使用者集區來存放使用者設定檔。使用者集區提供可自訂的使用者界面,讓您搭配應用程式。使用者集區還可以透過 SAML,輕鬆地與社交身分供應商 (例如 Facebook、Google 和 Amazon) 以及企業身分供應商 (例如 Microsoft Active Directory) 進行整合。

Amazon Cognito 身分池 – 資源存取控制

您可以透過 Amazon Cognito 控制對後端 AWS 資源和 API 的存取,讓應用程式的使用者只能獲得適當的存取權限。您可以將使用者對應到不同的角色和許可,並取得臨時 AWS 憑證以存取 Amazon S3、Amazon DynamoDB、Amazon API Gateway 和 AWS Lambda 等 AWS 服務。

線上影片

建立 Amazon Cognito 使用者集區 (7:37)
如何使用 Amazon Cognito 使用者集區進階安全功能 (12:00)
如何建立 Amazon Cognito 身分池 (7:25)

我們有常見問題的解答

  • 問:什麼是 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 Console 即可輕鬆地開始使用。如果沒有 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 將應用程式特定邏輯新增到使用者註冊以偵測詐騙和驗證使用者。若要進一步了解相關資訊,請瀏覽我們的文件。

    問:什麼是 Amazon Cognito 使用者集區?

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

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

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

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

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

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

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

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

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

    問:Amazon Cognito 是否支援以 SMS 為基礎的多重要素驗證 (MFA)?

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

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

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

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

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

    問:如何將現有應用程式使用者移轉到 Amazon Cognito 使用者集區?

    目前有兩種方法可以將使用者從應用程式的現有使用者目錄或資料庫移轉到使用者集區。

    Amazon Cognito 可使用內建 AWS Lambda 觸發程式,協助您在使用者登入應用程式時即時進行移轉。內建 Lambda 觸發程式可讓您在移轉使用者時,不用強制他們重設密碼。

    或者,您可以上傳內含所有應用程式使用者設定檔資料的 CSV 檔案,大批移轉使用者。您可以透過 Amazon Cognito 主控台、API 或 AWS CLI 上傳 CSV 檔案。首次登入時,使用者必須驗證其帳戶,並使用傳送至其電子郵件地址或電話號碼的驗證碼來建立新的密碼。

    如需進一步了解,請參閱將使用者匯入使用者集區

  • 問:是否可以使用 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 身分的鍵值/值組存放區。在身分集區和同步存放區中可以建立任意數量的身分。同步存放區中的每個 Amazon Cognito 身分都有自己的使用者資訊存放區。

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

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

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

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

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

    問:使用者身分和使用者資訊存放區是否會在開發人員間共用?
    否,使用者身分和資訊存放區與特定 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 同步?
    您可以在 AWS Mobile SDK 中使用 synchronize() 方法,透過程式設計的方式觸發用戶端裝置和 Amazon Cognito Sync 存放區之間的資料集同步。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 存放區。

  • 問:Amazon Cognito 使用者集區的成本是多少?

    如需 Amazon Cognito 使用者集區定價,請參閱 Amazon Cognito 定價頁面

    問:Amazon Cognito Sync 的成本是多少?

    如需 Amazon Cognito Sync 定價,請參閱 Amazon Cognito 定價頁面

    問:什麼是同步操作?

    當您使用 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 事件的費用是多少?
    使用 Cognito 事件觸發 Lambda 函數並不收取額外費用,但執行 Lambda 函數時所使用的 AWS Lambda 與其他 AWS 服務會收取正常費用。請參閱 AWS Lambda 定價頁面了解詳細資訊。