次の方法で共有


チュートリアル: 認証用に 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 を使用します。 テナントのサブドメイン名を知らない場合は、テナントの詳細を読み取る方法をご確認ください

カスタム URL ドメインを使用する (省略可能)

カスタム ドメインを使用して、認証 URL を完全にブランド化します。 ユーザーの視点から見ると、認証プロセスの間、ユーザーは ciamlogin.com ドメイン名にリダイレクトされず、あなたのドメインにとどまります。

カスタム ドメインを使用するには、以下の手順を実行します。

  1. 外部テナントのアプリに対してカスタム URL ドメインを有効にする」の手順を実行して、外部テナントに対してカスタム URL ドメインを有効にします。

  2. Configuration.swift ファイルを開きます。

    1. kAuthority プロパティの値を https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here に更新します。 Enter_the_Custom_Domain_Here を実際のカスタム URL ドメインに、Enter_the_Tenant_ID_Here を実際のテナント ID に置き換えます。 テナント ID がわからない場合は、テナントの詳細を読み取る方法を確認してください。

Configuration.swift ファイルを変更した後、カスタム URL ドメインが login.contoso.com で、テナント ID が 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"
    
    }

次のステップ

チュートリアル: iOS (Swift) モバイル アプリでユーザーをサインインさせる