Share via


使用 Azure AD B2C 在範例 iOS Swift 應用程式中設定驗證

本文使用範例 iOS Swift 應用程式來說明如何將 Azure Active Directory B2C (Azure AD B2C) 驗證新增至行動應用程式。

概觀

OpenID Connect (OIDC) 是建置於 OAuth 2.0 之上的驗證通訊協定。 您可以使用 OIDC,安全地將使用者登入應用程式。 此行動應用程式範例會使用 Microsoft 驗證程式庫 (MSAL) 搭配 OIDC 授權碼 Proof Key for Code Exchange (PKCE) 流程。 MSAL 是 Microsoft 提供的程式庫,可簡化將驗證與授權支援新增至行動應用程式的流程。

登入流程包含下列步驟:

  1. 使用者開啟應用程式並選取 [登入]
  2. 應用程式會開啟行動裝置的系統瀏覽器,並啟動對 Azure AD B2C 的驗證要求。
  3. 使用者註冊或登入重設密碼,或使用社交帳戶來登入。
  4. 當使用者成功登入之後,Azure AD B2C 就會將授權碼傳回給應用程式。
  5. 應用程式會採取下列動作:
    1. 它會將授權碼交換至識別碼權杖、存取權杖和重新整理權杖。
    2. 它會讀取識別碼權杖宣告。
    3. 它會將權杖儲存於記憶體中的快取,以供稍後使用。

應用程式註冊概觀

若要讓您的應用程式使用 Azure AD B2C 登入並呼叫 Web API,請在 Azure AD B2C 目錄中註冊兩個應用程式:

  • 行動應用程式註冊讓應用程式能夠使用 Azure AD B2C 登入。 在應用程式註冊期間,指定「重新導向 URI」。 重新導向 URI 是在使用者透過 Azure AD B2C 進行驗證之後,Azure AD B2C 會將他們重新導向其中的端點。 應用程式註冊程序會產生可唯一識別行動應用程式的「應用程式識別碼」(也稱為「用戶端識別碼」) (例如「應用程式識別碼:1」)。

  • Web API 註冊讓您的應用程式能夠呼叫受保護的 Web API。 註冊會公開 Web API 權限 (範圍)。 應用程式註冊程序會產生可唯一識別 Web API 的「應用程式識別碼」(例如「應用程式識別碼:2」)。 為您的行動應用程式 (應用程式識別碼:1) 授與 Web API 範圍 (應用程式識別碼:2) 的權限。

下圖說明應用程式註冊和架構:

Diagram of the mobile app with web API call registrations and tokens.

呼叫 Web API

驗證完成之後,使用者會與應用程式互動,而該應用程式會叫用受保護的 Web API。 該 Web API 會使用持有人權杖驗證。 持有人權杖是應用程式從 Azure AD B2C 取得的存取權杖。 應用程式會在 HTTPS 要求的授權標頭中傳遞權杖。

Authorization: Bearer <access token>

如果存取權杖的範圍與 Web API 的範圍不符,則驗證程式庫會取得具有正確範圍的新存取權杖。

登出流程

登出流程包含下列步驟:

  1. 使用者從應用程式登出。
  2. 應用程式會清除其工作階段物件,而驗證程式庫會清除其權杖快取。
  3. 應用程式會將使用者帶到 Azure AD B2C 登出端點,以終止該 Azure AD B2C 工作階段。
  4. 系統會將使用者重新導向回到應用程式。

必要條件

執行下列各項的電腦:

步驟 1:設定您的使用者流程

當使用者嘗試登入應用程式時,應用程式會透過使用者流程,啟動對授權端點的驗證要求。 使用者流程會定義並控制使用者體驗。 當使用者完成使用者流程之後,Azure AD B2C 會產生權杖,然後將使用者重新導向回到您的應用程式。

如果您尚未這麼做,請建立使用者流程或自訂原則。 重複步驟,以建立下列三個不同的使用者流程:

  • 合併的登入和註冊使用者流程 (例如 susi)。 這個使用者流程也支援忘記密碼體驗。
  • 設定檔編輯使用者流程 (例如 edit_profile)。
  • 密碼重設使用者流程 (例如 reset_password)。

Azure AD B2C 會在使用者流程名稱前面加上 B2C_1_。 例如,susi 會成為 B2C_1_susi

步驟 2:註冊行動應用程式

建立行動應用程式與 Web API 應用程式註冊,然後指定 Web API 的範圍。

步驟 2.1:註冊 Web API 應用程式

若要建立 Web API 應用程式註冊 (「應用程式識別碼:2」),請遵循下列步驟:

  1. 登入 Azure 入口網站

  2. 確定您使用的目錄包含您的 Azure AD B2C 租用戶。 選取入口網站工具列中的 [目錄 + 訂用帳戶] 圖示。

  3. 在 [入口網站設定] | [目錄 + 訂用帳戶] 頁面上,在 [目錄名稱] 清單中找出 Azure AD B2C 目錄,然後選取 [切換]

  4. 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]

  5. 選取 [應用程式註冊],然後選取 [新增註冊]

  6. 針對 [名稱],輸入應用程式的名稱 (例如 my-api1)。 保留 [重新導向 URI] 和 [支援的帳戶類型] 的預設值。

  7. 選取註冊

  8. 當應用程式註冊完成之後,選取 [概觀]

  9. 當您設定 Web 應用程式時,請記錄 [應用程式 (用戶端) 識別碼] 值,以供稍後使用。

    Screenshot that demonstrates how to get a web A P I application I D.

步驟 2.2:設定 Web API 應用程式範圍

  1. 選取您建立的 my-api1 應用程式 (應用程式識別碼:2),以開啟其 [概觀] 頁面。

  2. 在 [管理] 底下,選取 [公開 API]

  3. 選取 [應用程式識別碼 URI] 旁邊的 [設定] 連結。 以唯一的名稱 (例如 tasks-api) 取代預設值 (GUID),然後選取 [儲存]

    當您的 Web 應用程式要求 Web API 的存取權杖時,應該新增此 URI 作為您針對 API 所定義之每個範圍的前置詞。

  4. 在 [由此 API 定義的範圍] 底下,選取 [新增範圍]

  5. 若要建立定義 API 讀取存取權的範圍:

    1. 針對 [範圍名稱],輸入 tasks.read
    2. 針對 [管理員同意顯示名稱],輸入工作 API 的讀取存取權
    3. 針對 [管理員同意描述],輸入允許工作 API 的讀取存取權
  6. 選取新增範圍

  7. 選取 [新增範圍],然後新增定義 API 寫入存取權的範圍:

    1. 針對 [範圍名稱],輸入 tasks.write
    2. 針對 [管理員同意顯示名稱],輸入工作 API 的寫入存取權
    3. 針對 [管理員同意描述],輸入允許工作 API 的寫入存取權
  8. 選取新增範圍

步驟 2.3:註冊行動應用程式

若要建立行動應用程式註冊,請執行下列動作:

  1. 登入 Azure 入口網站
  2. 選取 [應用程式註冊],然後選取 [新增註冊]
  3. 在 [名稱] 下,輸入應用程式的名稱 (例如 iOs-app1)。
  4. 在 [支援的帳戶類型] 下,選取 [任何身分識別提供者或組織目錄中的帳戶 (用於運用使用者流程來驗證使用者)]
  5. 在 [重新導向 URI] 下,選取 [公用用戶端/原生 (行動裝置與電腦)],然後在 [URL] 方塊中輸入 msauth.com.microsoft.identitysample.MSALiOS://auth
  6. 選取註冊
  7. 當應用程式註冊完成之後,選取 [概觀]
  8. 當您設定行動應用程式時,請記錄 [應用程式 (用戶端) 識別碼],以供稍後使用。 Screenshot highlighting the mobile application ID.

步驟 2.4:為行動應用程式授與 Web API 的權限

若要為應用程式 (應用程式識別碼:1) 授與權限,請遵循下列步驟:

  1. 選取 [應用程式註冊],然後選取您建立的應用程式 (「應用程式識別碼:1」)。

  2. 在 [管理] 之下選取 [API 權限]

  3. 在 [已設定的權限] 底下,選取 [新增權限]

  4. 選取 [我的 API] 索引標籤。

  5. 選取 Web 應用程式應獲授存取權的 API (「應用程式識別碼:2」)。 例如,輸入 my-api1

  6. 在 [權限] 下,展開 [工作],然後選取您稍早定義的範圍 (例如 tasks.readtasks.write)。

  7. 選取新增權限

  8. 選取 [代表 <您的租用戶名稱> 授與管理員同意]

  9. 選取 [是]

  10. 選取 [重新整理],然後驗證 [授與...] 會出現在這兩個範圍的 [狀態] 下方。

  11. 從 [設定的權限] 清單中,選取您的範圍,然後複製範圍的完整名稱。

    Screenshot of the configured permissions pane, showing that read access permissions are granted.

步驟 3:設定範例 Web API

此範例會取得存取權杖,其中包含行動應用程式可用於 Web API 的相關範圍。 若要從程式碼呼叫 Web API,請執行下列動作:

  1. 使用現有的 Web API,或建立新的 Web API。 如需詳細資訊,請參閱使用 Azure AD B2C 在您自己的 Web API 中啟用驗證
  2. 變更範例程式碼以呼叫 Web API
  3. 當您設定 Web API 之後,請複製 Web API 端點的 URI。 您將在後續步驟中使用 Web API 端點。

提示

如果您沒有 Web API,您仍然可以執行此範例。 在此情況下,應用程式會傳回存取權杖,但無法呼叫 Web API。

步驟4:取得 iOS 行動應用程式範例

  1. 下載 .zip 檔案,或從 GitHub 存放庫複製範例 Web 應用程式。

    git clone https://github.com/Azure-Samples/active-directory-b2c-ios-swift-native-msal
    
  2. 使用 CocoaPods 來安裝 MSAL 程式庫。 在終端機視窗中,前往專案根資料夾。 此資料夾包含 podfile 檔案。 執行以下命令:

    pod install
    
  3. 使用 Xcode 開啟 MSALiOS.xcworkspace 工作區。

步驟 5:設定範例行動應用程式

開啟 ViewController.swift 檔案。 ViewController 類別成員包含 Azure AD B2C 識別提供者的相關資訊。 行動應用程式會使用此資訊建立與 Azure AD B2C 的信任關係、將使用者登入及登出、取得權杖,並驗證這些權杖。

更新下列類別成員:

機碼
kTenantName 您 Azure AD B2C 租用戶的完整租用戶名稱 (例如 contoso.onmicrosoft.com)。
kAuthorityHostName Azure AD B2C 租用戶名稱的第一個部分 (例如 contoso.b2clogin.com)。
kClientID 步驟 2.3 中的行動應用程式識別碼。
kRedirectUri 步驟 2.3 中的行動應用程式重新導向 URI msauth.com.microsoft.identitysample.MSALiOS://auth
kSignupOrSigninPolicy 您在步驟 1 中建立的註冊或登入使用者流程或自訂原則。
kEditProfilePolicy 您在步驟 1 中建立的編輯設定檔使用者流程或自訂原則。
kGraphURI (選擇性) 您在步驟 3 中建立的 Web API 端點 (例如 https://contoso.azurewebsites.net/hello)。
kScopes 您在步驟 2.4 中建立的 Web API 範圍。

步驟 6:執行及測試行動應用程式

  1. 使用已連線 iOS 裝置的模擬器來建立並執行專案。

  2. 選取 [登入],然後使用您的 Azure AD B2C 本機或社交帳戶進行註冊或登入。

    Screenshot highlighting how to start the sign-in flow.

  3. 成功驗證之後,您會在導覽列中看到顯示名稱。

    Screenshot highlighting the Azure AD B2C access token and user ID.

下一步

了解如何: