チュートリアル: 認証用に iOS (Swift) アプリを準備する

これは、iOS Swift アプリに iOS と macOS 用の Microsoft Authentication Library (MSAL) を追加する方法を示すチュートリアル シリーズの 2 番目のチュートリアルです。

このチュートリアルでは、次のことを行います。

  • MSAL フレームワークを iOS (Swift) アプリに追加します。
  • SDK インスタンスを作成する。

前提条件

  • Xcode
  • まだ行っていない場合は、「チュートリアル: iOS (Swift) モバイル アプリを登録して構成する」の手順に従い、外部テナントにアプリを登録します。 次の手順を完了してください。
    • アプリケーションを登録します。
    • プラットフォーム リダイレクト URL を追加します。
    • パブリック クライアント フローを有効にします。
    • Microsoft Graph への委任されたアクセス許可。
  • iOS (Swift) プロジェクト。

MSAL フレームワークを iOS (Swift) アプリに追加する

MSAL 認証 SDK は、標準的な OAuth2 と OpenID Connect を使用してアプリに認証を統合するために使用されます。 これにより、Microsoft ID を使用してユーザーやアプリにサインインできます。 iOS (Swift) プロジェクトに MSAL を追加するには、次の手順に従います。

  1. Xcode で iOS プロジェクトを開きます。
  2. [パッケージの依存関係を追加...][ファイル] メニューから選択します。
  3. https://github.com/AzureAD/microsoft-authentication-library-for-objc をパッケージ URL として入力し、[パッケージの追加] を選択 します

バンドル識別子を更新する

Apple エコシステムでは、バンドル識別子はアプリケーションの一意の識別子です。 プロジェクトのバンドル識別子を更新するには、次の手順に従います。

  1. プロジェクトの設定を開きます。 ID セクションに バンドル ID が表示されます。

  2. Info.plist を右クリックし、 [形式を指定して開く]>[ソース コード] を選択します。

  3. dict ルート ノードの下の Enter_the_bundle_Id_Here を、ポータルで使用した Bundle 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() 関数の直前に次のコードを追加して、ViewController クラスに applicationContext メンバー変数を追加します。

    var applicationContext : MSALPublicClientApplication?
    var webViewParamaters : MSALWebviewParameters?
    

    このコードは、MSALPublicClientApplication のインスタンスを格納する applicationContext と、MSALWebviewParameters のインスタンスを格納する webViewParameters の 2 つの変数を宣言します。 MSALPublicClientApplication は、公開クライアント アプリケーションを処理するために MSAL で提供されるクラスです。 MSALWebviewParameters は、認証プロセス中に使用される Web ビューを構成するためのパラメーターを定義する MSAL で提供されるクラスです。

  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)
    }
    

    このコードは MSAL for iOS を初期化します。 最初に、指定された Configuration.kAuthority 文字列を使用して、権限の URL の作成を試みます。 成功すると、その URL に基づいて MSAL 権限オブジェクトが作成されます。 次に、MSALPublicClientApplication を付与されたクライアント ID、リダイレクト URI、権限を使用して構成します。 すべての構成が正しく設定されている場合は、構成済みの 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) モバイル アプリでユーザーをサインインさせる