チュートリアル: 認証用に 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 を追加するには、次の手順に従います。
- Xcode で iOS プロジェクトを開きます。
- [パッケージの依存関係を追加...] を [ファイル] メニューから選択します。
https://github.com/AzureAD/microsoft-authentication-library-for-objc
をパッケージ URL として入力し、[パッケージの追加] を選択 します
バンドル識別子を更新する
Apple エコシステムでは、バンドル識別子はアプリケーションの一意の識別子です。 プロジェクトのバンドル識別子を更新するには、次の手順に従います。
プロジェクトの設定を開きます。 ID セクションに バンドル 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 インスタンスを作成するには、次の手順に従います。
ViewController
クラスの上部にimport MSAL
を追加して、ビュー コントローラーに MSAL ライブラリをインポートします。viewDidLoad()
関数の直前に次のコードを追加して、ViewController クラスにapplicationContext
メンバー変数を追加します。var applicationContext : MSALPublicClientApplication? var webViewParamaters : MSALWebviewParameters?
このコードは、
MSALPublicClientApplication
のインスタンスを格納するapplicationContext
と、MSALWebviewParameters
のインスタンスを格納するwebViewParameters
の 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) }
このコードは MSAL for iOS を初期化します。 最初に、指定された Configuration.kAuthority 文字列を使用して、権限の URL の作成を試みます。 成功すると、その URL に基づいて MSAL 権限オブジェクトが作成されます。 次に、
MSALPublicClientApplication
を付与されたクライアント ID、リダイレクト URI、権限を使用して構成します。 すべての構成が正しく設定されている場合は、構成済みの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
を使用します。 テナントのサブドメイン名を知らない場合は、テナントの詳細を読み取る方法をご確認ください。
次のステップ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示