クイック スタート: iOS または macOS アプリからユーザーのサインインを行い、Microsoft Graph を呼び出す

このクイックスタートでは、ネイティブの iOS または macOS アプリケーションでユーザーをサインインし、アクセス トークンを取得して Microsoft Graph API を呼び出す方法を示すコード サンプルをダウンロードして実行します。

このクイックスタートは、iOS アプリと macOS アプリの両方に適用されます。 一部の手順は iOS アプリにのみ必要であり、そのように示されます。

前提条件

このサンプルのしくみ

このクイックスタートで生成されたサンプル アプリの動作を示す図。

クイック スタート アプリケーションを登録する

ヒント

この記事の手順は、開始するポータルによって若干異なる場合があります。

アプリケーションを登録し、その登録情報をソリューションに手動で追加するには、次の手順を実行します。

  1. アプリケーション開発者以上として Microsoft Entra 管理センターにサインインします。
  2. 複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使い、[ディレクトリとサブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。
  3. [ID]>[アプリケーション]>[アプリの登録] を参照します。
  4. [新規登録] を選択します。
  5. アプリケーションの [名前] を入力します。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。
  6. [登録] を選択します。
  7. [管理] で、 [認証]>[プラットフォームの追加]>[iOS] の順に選択します。
  8. アプリケーションのバンドル ID を入力します。 バンドル識別子は、アプリケーションを一意に識別する一意の文字列です (例: com.<yourname>.identitysample.MSALMacOS)。 使用する値を書き留めておきます。 iOS の構成は macOS アプリケーションにも適用できることに注意してください。
  9. [構成] を選択し、このクイックスタートでの後の手順のために MSAL 構成の詳細を保存しておきます。
  10. [完了] を選択します。

手順 2:サンプル プロジェクトのダウンロード

手順 3:依存関係のインストール

  1. zip ファイルを解凍します。
  2. ターミナル ウィンドウで、ダウンロードしたコード サンプルが含まれるフォルダーに移動し、pod install を実行して、最新の MSAL ライブラリをインストールします。

手順 4:プロジェクトを構成する

上のオプション 1 を選択した場合は、以下の手順を省略できます。

  1. XCode でプロジェクトを開きます。

  2. ViewController.swift を編集し、'let kClientID' で始まる行を次のコード スニペットに置き換えます。 kClientID の値を、このクイック スタートの前の手順でポータルにアプリを登録したときに保存したクライアント ID に必ず更新してください:

    let kClientID = "Enter_the_Application_Id_Here"
    
  3. Microsoft Entra ID 国内クラウド向けのアプリを構築している場合は、"let kGraphEndpoint" および "let kAuthority" で始まる行を適切なエンドポイントに置き換えます。 グローバル アクセスの場合は、既定値を使用してください。

    let kGraphEndpoint = "https://graph.microsoft.com/"
    let kAuthority = "https://login.microsoftonline.com/common"
    
  4. その他のエンドポイントは、こちらに記載されています。 たとえば、このクイックスタートを Microsoft Entra Germany で実行するには、以下を使用します。

    let kGraphEndpoint = "https://graph.microsoft.de/"
    let kAuthority = "https://login.microsoftonline.de/common"
    
  5. プロジェクトの設定を開きます。 ID セクションに バンドル ID が表示されます。

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

  7. 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>
    
  8. アプリをビルドして実行します。

詳細情報

このクイック スタートの詳細については、以下のセクションをお読みください。

MSAL の取得

MSAL (MSAL.framework) はユーザーをサインインし、Microsoft ID プラットフォームによって保護されている API にアクセスするトークンを要求するために使用するライブラリです。 MSAL は、次のプロセスを使用してアプリケーションに追加できます。

$ vi Podfile

次の内容を (プロジェクトのターゲットと共に) この podfile に追加します。

use_frameworks!

target 'MSALiOS' do
   pod 'MSAL'
end

CocoaPods インストール コマンドを実行します。

pod install

MSAL の初期化

MSAL への参照を追加するには、次のコードを追加します。

import MSAL

続いて、次のコードを使用して MSAL を初期化します。

let authority = try MSALAADAuthority(url: URL(string: kAuthority)!)

let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID, redirectUri: nil, authority: authority)
self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)
各値の説明: 説明
clientId portal.azure.com に登録されているアプリケーションの Application ID
authority Microsoft ID プラットフォーム。 ほとんどの場合、これは https://login.microsoftonline.com/common になります
redirectUri アプリケーションのリダイレクト URI。 'nil' を渡すと、既定値またはカスタムのリダイレクト URI を使用できます。

iOS のみ: アプリの追加要件

アプリでは、AppDelegate 内に次の内容も必要です。 これにより、認証を実行するときに MSAL SDK による Auth ブローカー アプリからのトークン応答の処理が可能になります。

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

    return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String)
}

注意

iOS 13 以降では、UIApplicationDelegate ではなく UISceneDelegate を採用する場合は、代わりに scene:openURLContexts: のコールバックにこのコードを配置します (Apple のドキュメントを参照してください)。 以前の iOS との互換性を保持するために UISceneDelegate と UIApplicationDelegate の両方をサポートしている場合は、MSAL コールバックを両方の場所に配置する必要があります。

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

   guard let urlContext = URLContexts.first else {
      return
   }

   let url = urlContext.url
   let sourceApp = urlContext.options.sourceApplication

   MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: sourceApp)
}

最後に、アプリでは、LSApplicationQueriesSchemes エントリが Info.plistCFBundleURLTypes と並んで存在している必要があります。 サンプルにはこれが含まれています。

<key>LSApplicationQueriesSchemes</key>
<array>
   <string>msauthv2</string>
   <string>msauthv3</string>
</array>

ユーザーのサインインを行ってトークンを要求する

MSAL には、トークンの取得に使用する 2 つのメソッド acquireTokenacquireTokenSilent があります。

acquireToken: 対話形式でのユーザー トークンの取得

状況によっては、ユーザーが Microsoft ID プラットフォームと対話する必要があります。 このような場合、エンド ユーザーは自分のアカウントを選択する、自分の資格情報を入力する、またはアプリのアクセス許可に同意することを要求される可能性があります。 たとえば、次のように入力します。

  • ユーザーが初めてアプリケーションにサインインした場合
  • ユーザーが自分のパスワードをリセットした場合、ユーザーは自分の資格情報を入力する必要がある
  • アプリケーションがリソースへのアクセスを初めて要求している場合
  • MFA またはその他の条件付きアクセス ポリシーが必要な場合
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParamaters!)
self.applicationContext!.acquireToken(with: parameters) { (result, error) in /* Add your handling logic */}
各値の説明: 説明
scopes 要求するスコープを含む (つまり、Microsoft Graph 用の [ "user.read" ] またはカスタム Web API 用の [ "<Application ID URL>/scope" ] (api://<Application ID>/access_as_user))

acquireTokenSilent: アクセス トークンを自動的に取得する

アプリは、トークンを要求するたびに、ユーザーにサインインを要求するべきではありません。 ユーザーが既にサインインしている場合は、この方法により、アプリはトークンを暗黙的に要求できます。

self.applicationContext!.getCurrentAccount(with: nil) { (currentAccount, previousAccount, error) in

   guard let account = currentAccount else {
      return
   }

   let silentParams = MSALSilentTokenParameters(scopes: self.kScopes, account: account)
   self.applicationContext!.acquireTokenSilent(with: silentParams) { (result, error) in /* Add your handling logic */}
}
各値の説明: 説明
scopes 要求するスコープを含む (つまり、Microsoft Graph 用の [ "user.read" ] またはカスタム Web API 用の [ "<Application ID URL>/scope" ] (api://<Application ID>/access_as_user))
account トークンが要求されているアカウント。 このクイックスタートでは、単一アカウントのアプリケーションを取り扱います。 複数アカウントのアプリを構築する場合は、accountsFromDeviceForParameters:completionBlock: を使用し、正しい accountIdentifier を渡して、どのアカウントをトークン要求に使用するかを識別するためのロジックを定義する必要があります

ヘルプとサポート

サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。

次のステップ

Microsoft ID プラットフォームからアクセス トークンを取得し、これを使用して Microsoft Graph API を呼び出す iOS または macOS アプリを作成するステップバイステップのチュートリアルに進みます。