教程:准备 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) 项目,请执行以下步骤:

  1. 在 Xcode 中打开 iOS 项目。
  2. 从“文件”菜单中选择“添加包依赖项...”。
  3. 输入 https://github.com/AzureAD/microsoft-authentication-library-for-objc 作为包 URL,然后选择“添加包”

更新捆绑标识符

在 Apple 生态系统中,捆绑标识符是应用程序的唯一标识符。 要在项目中更新捆绑标识符,请执行以下步骤:

  1. 打开项目设置。 在“标识”部分输“捆绑标识符”

  2. 右键单击“Info.plist”,然后选择“打开为”>“源代码”。

  3. 在 dict 根节点下,将 Enter_the_bundle_Id_Here 替换为你在门户中使用的捆绑 ID。 请注意字符串中的 msauth. 前缀。

    <key>CFBundleURLTypes</key>
    <array>
       <dict>
          <key>CFBundleURLSchemes</key>
          <array>
             <string>msauth.Enter_the_Bundle_Id_Here</string>
          </array>
       </dict>
    </array>
    

创建 SDK 实例

要在项目中创建 MSAL 实例,请执行以下步骤:

  1. 通过在 ViewController 类顶部添加 import MSAL,将 MSAL 库导入视图控制器。

  2. 通过在viewDidLoad()函数前面添加以下代码,将applicationContext成员变量添加到 ViewController 类:

    var applicationContext : MSALPublicClientApplication?
    var webViewParamaters : MSALWebviewParameters?
    

    代码声明两个变量:applicationContext(存储MSALPublicClientApplication的实例)和webViewParameters(存储MSALWebviewParameters的实例)。 MSALPublicClientApplication是由 MSAL 提供的类,用于处理公共客户端应用程序。 MSALWebviewParameters是由 MSAL 提供的类,用于定义用于配置身份验证过程中使用的 Web 视图的参数。

  3. 将以下代码添加到视图viewDidLoad()函数:

     do {
            try self.initMSAL()
        } catch let error {
            self.updateLogging(text: "Unable to create Application Context \(error)")
        }
    

    代码尝试初始化 MSAL,处理过程中发生的任何错误。 如果发生错误,它会使用错误的详细信息更新日志记录。

  4. 添加以下代码,用于创建初始化 MSAL 的initMSAL()函数:

        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 颁发机构对象。 然后,它使用给定的客户端 ID、重定向 URI 和颁发机构配置MSALPublicClientApplication。 如果已正确设置所有配置,则会使用配置的MSALPublicClientApplication初始化应用程序上下文。 如果过程中发生任何错误,则会引发错误。

  5. 创建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标记。 它包括与身份验证设置相关的各种配置参数的静态常量。 这些参数包括租户子域客户端 ID重定向 URI受保护的 API 终结点以及范围。 这些配置常量应使用特定于应用程序的设置的适当值进行更新。

    查找占位符:

    • 查找 Enter_the_Application_Id_Here 并将其替换为之前注册的应用的应用程序(客户端)ID。
    • Enter_the_Redirect_URI_Here并将其替换为之前在添加平台重定向 URL 时下载的 MSAL 配置文件中kRedirectUri的值。
    • Enter_the_Protected_API_Scopes_Here并将其替换为前面记录的范围。 如果尚未记录任何范围,可以将此范围列表留空。
    • Enter_the_Tenant_Subdomain_Here 并将其替换为目录(租户)子域。 例如,如果租户主域为 contoso.onmicrosoft.com,请使用 contoso。 如果不知道租户子域,请了解如何读取租户详细信息

后续步骤

教程:在 iOS (Swift) 移动应用中登录用户