適用対象: 従業員テナント
外部テナント (詳細はこちら)
これは、iOS および macOS 用の Microsoft Authentication Library (MSAL) を iOS Swift アプリに追加する方法を示すチュートリアル シリーズの 2 番目のチュートリアルです。
開始する前に、このページの上部にある [テナントの種類 の選択] セレクターを使用して、テナントの種類を選択します。 Microsoft Entra ID には、 従業員 と 外部の 2 つのテナント構成が用意されています。 従業員テナントの構成は、従業員、内部アプリ、およびその他の組織リソースを対象としています。 外部テナントは、顧客向けのアプリ用です。
このチュートリアルでは、次の操作を行います。
- MSAL フレームワークを iOS (Swift) アプリに追加します。
- SDK インスタンスを作成します。
- Xcode プロジェクトの設定を構成します。
[前提条件]
- Microsoft Entra 管理センターに新しいクライアント Web アプリを登録します。 これは、組織のディレクトリと個人用の Microsoft アカウントのアカウント用に構成されています。 詳細については、「 アプリケーションの登録 」を参照してください。 後で使用するために、アプリケーション の [概要 ] ページから次の値を記録します。
- アプリケーション (クライアント) ID
- ディレクトリ (テナント) ID
- Xcode。
- iOS (Swift) プロジェクト。
プラットフォーム リダイレクト URL を追加する
アプリの登録にアプリの種類を指定するには、次の手順に従います。
- [管理] で、 [認証]>[プラットフォームの追加]>[iOS/macOS] の順に選択します。
- プロジェクトのバンドル ID を入力します。 コード サンプルをダウンロードすると、バンドル ID は
com.microsoft.identitysample.MSALiOS
になります。 独自のプロジェクトを作成している場合は、Xcode でそのプロジェクトを選択し、 [全般] タブを開きます。 [ID] セクションにバンドル ID が表示されます。 - [構成] をクリックし、後でアプリを構成するときに入力できるように、 [MSAL の構成] ページに表示される [MSAL 構成] を保存しておきます。
- 完了を選択します。
iOS (Swift) アプリに MSAL フレームワークを追加する
次のいずれかの方法を選択して、アプリに MSAL ライブラリをインストールします。
ココアポッド
CocoaPods を使用している場合は、まずプロジェクトの
MSAL
ファイルと同じフォルダーに podfile という名前の空のファイルを作成してから、 をインストールします。 Podfile に次のコードを追加して保存します:use_frameworks! target '<your-target-here>' do pod 'MSAL' end
<your-target-here>
を自分のプロジェクト名に置き換えます。ターミナル ウィンドウで、作成した podfile を含むフォルダーに移動し、
pod install
を実行して MSAL ライブラリをインストールします。Xcode を閉じて
<your project name>.xcworkspace
を開き、Xcode にプロジェクトを再度読み込みます。
カルタゴ
Carthage を使用している場合は、MSAL
に追加することで をインストールします。
github "AzureAD/microsoft-authentication-library-for-objc" "master"
ターミナル ウィンドウから、更新された Cartfile と同じディレクトリで次のコマンドを実行して、Carthage でのプロジェクトの依存関係を更新します。
iOSの場合:
carthage update --platform iOS
macOSの場合:
carthage update --platform macOS
手動
Git サブモジュールを使用するか、最新のリリースをチェックアウトして、アプリケーションでフレームワークとして使用することもできます。
アプリの登録を追加する
次に、アプリ登録をコードに追加します。
最初に、ViewController.swift ファイルの先頭に次の import ステートメントを追加し、AppDelegate.swift または SceneDelegate.swift を追加します:
import MSAL
次に、ViewController.swiftでviewDidLoad()
の前に次のコードを追加します。
// Update the below to your client ID. The below is for running the demo only
let kClientID = "Your_Application_Id_Here"
let kGraphEndpoint = "https://graph.microsoft.com/" // the Microsoft Graph endpoint
let kAuthority = "https://login.microsoftonline.com/common" // this authority allows a personal Microsoft account and a work or school account in any organization's Azure AD tenant to sign in
let kScopes: [String] = ["user.read"] // request permission to read the profile of the signed-in user
var accessToken = String()
var applicationContext : MSALPublicClientApplication?
var webViewParameters : MSALWebviewParameters?
var currentAccount: MSALAccount?
変更する値は、kClientID
に割り当てるアプリケーション ID の値だけです。 この値は、このチュートリアルの最初のアプリケーションを登録する手順で保存した、MSAL 構成データの一部です。
SDK インスタンスを作成する
プロジェクトで MSAL インスタンスを作成するには、次の手順に従います。
ViewController
メソッドを initMSAL
クラスに追加します:
func initMSAL() throws {
guard let authorityURL = URL(string: kAuthority) else {
self.updateLogging(text: "Unable to create authority URL")
return
}
let authority = try MSALAADAuthority(url: authorityURL)
let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID, redirectUri: nil, authority: authority)
self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)
self.initWebViewParams()
}
まだ ViewController
クラス内にあり、initMSAL
メソッドの後に initWebViewParams
メソッドを追加します:
iOS コード:
func initWebViewParams() {
self.webViewParameters = MSALWebviewParameters(authPresentationViewController: self)
}
macOS コード:
func initWebViewParams() {
self.webViewParameters = MSALWebviewParameters()
}
Xcode プロジェクト設定の構成
新しいキーチェーン グループをプロジェクトの [Signing & Capabilities]\(署名と機能\) に追加します。 このキーチェーン グループは、iOS の場合は com.microsoft.adalcache
、macOS の場合は com.microsoft.identity.universalstorage
にする必要があります。
iOS のみ: URL スキームを構成する
この手順では、サインイン後にユーザーがアプリにリダイレクトできるように、CFBundleURLSchemes
を登録します。 なお、LSApplicationQueriesSchemes
では、アプリでの Microsoft Authenticator の使用も許可されます。
Xcode で、Info.plist をソース コード ファイルとして開き、<dict>
セクション内に以下を追加します。
[BUNDLE_ID]
を、前に使用した値に置き換えます。 コードをダウンロードした場合、バンドル識別子は com.microsoft.identitysample.MSALiOS
です。 独自のプロジェクトを作成している場合は、Xcode でそのプロジェクトを選択し、 [全般] タブを開きます。 [ID] セクションにバンドル ID が表示されます。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>msauth.[BUNDLE_ID]</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>msauthv2</string>
<string>msauthv3</string>
</array>
macOS のみ: App Sandboxを構成する
- [Xcode プロジェクトの設定] >[機能] タブ > [App Sandbox] に移動します。
- [発信接続 (クライアント)] チェックボックスをオンにします。
次のステップ
これは、iOS および macOS 用の Microsoft Authentication Library (MSAL) を iOS Swift アプリに追加する方法を示すチュートリアル シリーズの 2 番目のチュートリアルです。
開始する前に、このページの上部にある [テナントの種類 の選択] セレクターを使用して、テナントの種類を選択します。 Microsoft Entra ID には、 従業員 と 外部の 2 つのテナント構成が用意されています。 従業員テナントの構成は、従業員、内部アプリ、およびその他の組織リソースを対象としています。 外部テナントは、顧客向けのアプリ用です。
このチュートリアルでは、次の操作を行います。
- MSAL フレームワークを iOS (Swift) アプリに追加します。
- SDK インスタンスを作成します。
[前提条件]
- Microsoft Entra 管理センターに新しいクライアント Web アプリを登録します。 これは、組織のディレクトリと個人用の Microsoft アカウントのアカウント用に構成されています。 詳細については、「 アプリケーションの登録 」を参照してください。 後で使用するために、アプリケーション の [概要 ] ページから次の値を記録します。
- アプリケーション (クライアント) ID
- ディレクトリ (テナント) ID
- Xcode。
- iOS (Swift) プロジェクト。
プラットフォーム リダイレクト URL を追加する
アプリの登録にアプリの種類を指定するには、次の手順に従います。
- [管理] で、 [認証]>[プラットフォームの追加]>[iOS/macOS] の順に選択します。
- プロジェクトのバンドル ID を入力します。 コード サンプルをダウンロードすると、バンドル ID は
com.microsoft.identitysample.MSALiOS
になります。 独自のプロジェクトを作成している場合は、Xcode でそのプロジェクトを選択し、 [全般] タブを開きます。 [ID] セクションにバンドル ID が表示されます。 - [構成] をクリックし、後でアプリを構成するときに入力できるように、 [MSAL の構成] ページに表示される [MSAL 構成] を保存しておきます。
- 完了を選択します。
パブリック クライアント フローを有効にする
アプリをパブリック クライアントとして識別するには、次の手順に従います。
[管理] で、 [認証] を選択します。
[詳細設定] で、[パブリック クライアント フローを許可する] に対して [はい] を選択します。
[保存] を選択して変更を保存します。
iOS (Swift) アプリに MSAL フレームワークを追加する
MSAL 認証 SDK は、標準の OAuth2 と OpenID Connect を使用してアプリに認証を統合するために使用されます。 これにより、Microsoft ID を使用してユーザーまたはアプリにサインインできます。 iOS (Swift) プロジェクトに MSAL を追加するには、次の手順に従います。
- Xcode で iOS プロジェクトを開きます。
- [ファイル] メニューから [パッケージの依存関係の追加...] を選択します。
- パッケージ URL として「
https://github.com/AzureAD/microsoft-authentication-library-for-objc
」と入力し、[パッケージの追加] を選択します
バンドル識別子を更新する
Apple エコシステムでは、バンドル識別子はアプリケーションの一意の識別子です。 プロジェクトのバンドル識別子を更新するには、次の手順に従います。
プロジェクトの設定を開きます。 アイデンティティ セクションに バンドル ID を入力してください。
Info.plist を右クリックし、 [形式を指定して開く]>[ソース コード] を選択します。
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 インスタンスを作成するには、次の手順に従います。
import MSAL
クラスの上部にViewController
を追加して、MSAL ライブラリをビュー コントローラーにインポートします。applicationContext
関数の直前に次のコードを追加して、viewDidLoad()
メンバー変数を ViewController クラスに追加します。var applicationContext : MSALPublicClientApplication? var webViewParameters : MSALWebviewParameters?
このコードでは、
applicationContext
のインスタンスを格納するMSALPublicClientApplication
と、webViewParameters
のインスタンスを格納するMSALWebviewParameters
の 2 つの変数を宣言します。MSALPublicClientApplication
は、パブリック クライアント アプリケーションを処理するために MSAL によって提供されるクラスです。MSALWebviewParameters
は、認証プロセス中に使用される Web ビューを構成するためのパラメーターを定義する MSAL によって提供されるクラスです。ビュー
viewDidLoad()
関数に次のコードを追加します。do { try self.initMSAL() } catch let error { self.updateLogging(text: "Unable to create Application Context \(error)") }
このコードは、プロセス中に発生したエラーを処理して、MSAL の初期化を試みます。 エラーが発生した場合は、エラーの詳細でログ記録を更新します。
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
を使用してアプリケーション コンテキストが初期化されます。 プロセス中にエラーが発生した場合は、エラーをスローします。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 ドメイン名にリダイレクトされず、あなたのドメインにとどまります。
カスタム ドメインを使用するには、以下の手順を実行します。
「外部テナント内のアプリに対するカスタム URL ドメインの有効化」の手順を使用し、外部テナントに対してカスタム URL ドメインを有効にします。
Configuration.swift ファイルを開きます。
-
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-dddd222eeee の場合、ファイルは次のスニペットのようになります。
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"
}