教學課程:準備 iOS (Swift) 應用程式進行驗證
這是教學課程系列中的第二個教學課程,示範如何將適用於 iOS 和 macOS 的 Microsoft 驗證程式庫 (MSAL) 新增至 iOS Swift 應用程式。
在本教學課程中,您將會:
- 將 MSAL 架構新增至 iOS (Swift) 應用程式。
- 建立 SDK 執行個體。
必要條件
- Xcode。
- 如果您尚未這麼做,請遵循教學課程:註冊和設定 iOS (Swift) 行動應用程式中的指示,並在外部租用戶註冊應用程式。 請務必完成下列步驟:
- 註冊應用程式。
- 新增平台重新導向 URL。
- 啟用公用用戶端流程。
- Microsoft Graph 的委派權限。
- iOS (Swift) 專案。
將 MSAL 架構新增至 iOS (Swift) 應用程式
MSAL 驗證 SDK 是用來透過標準 OAuth2 和 OpenID Connect,將驗證整合到您的應用程式。 它可讓您使用 Microsoft 身分識別來登入使用者或應用程式。 若要將 MSAL 新增至 iOS (Swift) 專案,請遵循下列步驟:
- 在 Xcode 中開啟 iOS 專案。
- 從 [檔案] 功能表中選取 [新增套件相依性...]。
- 輸入
https://github.com/AzureAD/microsoft-authentication-library-for-objc
作為套件 URL,然後選擇 [新增套件]
更新套件組合識別碼
在 Apple 生態系統中,套件組合識別碼是應用程式的唯一標識碼。 若要更新專案中的套件組合識別碼,請遵循下列步驟:
開啟專案設定。 在 [身分識別] 區段中,輸入 [套件組合識別碼]。
以滑鼠右鍵按一下 [Info.plist],然後選取 [開啟為]>[原始程式碼]。
在 dict 根節點下,將
Enter_the_bundle_Id_Here
取代為您在入口網站中使用的 [套件組合識別碼]。 請注意字串中的msauth.
前置詞。<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>msauth.Enter_the_Bundle_Id_Here</string> </array> </dict> </array>
建立 SDK 執行個體
若要在專案中建立 MSAL 執行個體,請遵循下列步驟:
在
ViewController
類別頂端新增import MSAL
,藉此將 MSAL 程式庫匯入檢視控制器。若要將
applicationContext
成員變數新增至 ViewController 類別,請在viewDidLoad()
函式之前新增下列程式碼:var applicationContext : MSALPublicClientApplication? var webViewParamaters : MSALWebviewParameters?
此程式碼會宣告兩個變數:
applicationContext
,用來儲存的MSALPublicClientApplication
的執行個體,以及webViewParameters
,用來儲存的MSALWebviewParameters
的執行個體。MSALPublicClientApplication
是 MSAL 提供的類別,用於處理公用用戶端應用程式。MSALWebviewParameters
是 MSAL 提供的類別,定義參數以設定驗證程序期間所使用的 Web 檢視。將下列程式碼新增至檢視
viewDidLoad()
函式:do { try self.initMSAL() } catch let error { self.updateLogging(text: "Unable to create Application Context \(error)") }
此程式碼會嘗試初始化 MSAL,處理程序執行期間發生的任何錯誤。 如果發生錯誤,即會以錯誤的詳細資料更新記錄。
新增下列建立
initMSAL()
函式的程式碼,以初始化 MSAL:func initMSAL() throws { guard let authorityURL = URL(string: Configuration.kAuthority) else { self.updateLogging(text: "Unable to create authority URL") return } let authority = try MSALCIAMAuthority(url: authorityURL) let msalConfiguration = MSALPublicClientApplicationConfig(clientId: Configuration.kClientID, redirectUri: Configuration.kRedirectUri, authority: authority) self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration) }
此程式碼會初始化適用於 iOS 的 MSAL。 它會先嘗試使用提供的 Configuration.kAuthority 字串來建立授權單位的 URL。 如果成功,則會依據該 URL 建立 MSAL 授權單位物件。 然後,使用指定的用戶端識別碼、重新導向 URI 和授權單位來設定
MSALPublicClientApplication
。 如果所有設定均已正確指定,則會使用已設定的MSALPublicClientApplication
來初始化應用程式內容。 如果程序執行期間發生任何錯誤,則會擲回錯誤。建立 Configuration.swift 檔案,並新增下列設定:
import Foundation @objcMembers class Configuration { static let kTenantSubdomain = "Enter_the_Tenant_Subdomain_Here" // Update the below to your client ID you received in the portal. static let kClientID = "Enter_the_Application_Id_Here" static let kRedirectUri = "Enter_the_Redirect_URI_Here" static let kProtectedAPIEndpoint = "Enter_the_Protected_API_Full_URL_Here" static let kScopes = ["Enter_the_Protected_API_Scopes_Here"] static let kAuthority = "https://\(kTenantSubdomain).ciamlogin.com" }
這個 Swift 設定程式碼會定義名為
Configuration
的類別,並使用@objcMembers
標示。 它包含與驗證設定相關的各種設定參數所使用的靜態常數。 這些參數包括租用戶子網域、用戶端識別碼、重新導向 URI、受保護的 API 端點和範圍。 這些設定常數應更新為應用程式設定專用的適當值。尋找預留位置:
Enter_the_Application_Id_Here
並將它取代為您稍早註冊的應用程式所使用的應用程式 (用戶端) 識別碼。Enter_the_Redirect_URI_Here
並將它取代為您稍早新增平台重新導向 URL 時下載的 MSAL 設定檔中的 kRedirectUri 值。Enter_the_Protected_API_Scopes_Here
並將它取代為稍早記錄的範圍。 如果您尚未記錄任何範圍,可以將此範圍清單留白。Enter_the_Tenant_Subdomain_Here
,並將其取代為目錄 (租用戶) 子網域。 例如,若租用戶主要網域是contoso.onmicrosoft.com
,請使用contoso
。 若不知道租用戶子網域,請了解如何讀取租用戶詳細資料。
使用自訂 URL 網域 (選用)
使用自訂網域對驗證 URL 進行完整品牌化。 就使用者而言,使用者在驗證過程中一直停留在您的網域中,而不會重新導向至 ciamlogin.com 網域名稱。
使用下列步驟來使用自訂網域:
使用針對外部租用戶中的應用程式啟用自訂 URL 網域中的步驟,為外部租用戶啟用自訂 URL 網域。
開啟 Configuration.swift 檔案:
- 將
kAuthority
屬性的值更新為 https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here。 以您的自訂 URL 網域取代Enter_the_Custom_Domain_Here
,並以您的租用戶識別碼取代Enter_the_Tenant_ID_Here
。 如果您沒有租用戶識別碼,請了解如何讀取租用戶詳細資料。
- 將
對 Configuration.swift 檔案進行變更之後,如果您的自訂 URL 網域為 login.contoso.com,且您的租用戶識別碼為 aaaabbbb-0000-cccc-1111-dddd2222eeee,則您的檔案看起來應該類似以下程式碼片段:
import Foundation
@objcMembers
class Configuration {
static let kTenantSubdomain = "login.contoso.com"
// Update the below to your client ID you received in the portal.
static let kClientID = "Enter_the_Application_Id_Here"
static let kRedirectUri = "Enter_the_Redirect_URI_Here"
static let kProtectedAPIEndpoint = "Enter_the_Protected_API_Full_URL_Here"
static let kScopes = ["Enter_the_Protected_API_Scopes_Here"]
static let kAuthority = "https://\(kTenantSubdomain)/aaaabbbb-0000-cccc-1111-dddd2222eeee"
}