適用対象: 従業員テナント
外部テナント (詳細はこちら)
これは、Microsoft Entra ID を使用してユーザーをサインインさせ、保護された Web API を呼び出す方法について説明するチュートリアル シリーズの 4 番目のチュートリアルです。
このチュートリアルでは、次の操作を行います。
- 保護された Web API を呼び出します。
前提条件
API の呼び出し
トークンを取得したら、アプリでそれを HTTP ヘッダーで使用して、許可された要求を Microsoft Graph に対して行うことができます。
ヘッダー キー | 価値 |
---|---|
認可 | ベアラー <access-token> |
以下のコードを ViewController
クラスに追加します。
func getContentWithToken() {
// Specify the Graph API endpoint
let graphURI = getGraphEndpoint()
let url = URL(string: graphURI)
var request = URLRequest(url: url!)
// Set the Authorization header for the request. We use Bearer tokens, so we specify Bearer + the token we got from the result
request.setValue("Bearer \(self.accessToken)", forHTTPHeaderField: "Authorization")
URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
self.updateLogging(text: "Couldn't get graph result: \(error)")
return
}
guard let result = try? JSONSerialization.jsonObject(with: data!, options: []) else {
self.updateLogging(text: "Couldn't deserialize result JSON")
return
}
self.updateLogging(text: "Result from Graph: \(result))")
}.resume()
}
Microsoft Graph API の詳細については、Microsoft Graph API に関するページを参照してください。
アプリをテストする
アプリをビルドし、テスト デバイスまたはシミュレーターに展開します。 サインインして、Microsoft Entra ID または個人用 Microsoft アカウントのトークンを取得できるようになります。
ユーザーは、アプリに初めてサインインするときに、Microsoft Identity から、要求されたアクセス許可に同意するよう求められます。 ほとんどのユーザーは同意できますが、一部の Microsoft Entra テナントではユーザーによる同意が無効になっており、全ユーザーに代わって管理者が同意を行う必要があります。 このシナリオをサポートするには、アプリのスコープを登録します。
サインインした後、Microsoft Graph の /me
エンドポイントから返されたデータがアプリに表示されます。
次のステップ
保護された Web API を呼び出すモバイル アプリを作成するには、複数のパートで構成される次のシナリオ シリーズを参照してください。
これは、Microsoft Entra External ID を使用してユーザーのサインインと保護された Web API の呼び出しについて説明するチュートリアル シリーズの 4 番目のチュートリアルです。
このチュートリアルでは、次の操作を行います。
- 保護された Web API を呼び出します。
前提条件
少なくとも 1 つのスコープ (委任されたアクセス許可) と 1 つのアプリ ロール (アプリケーション アクセス許可) を発行する API 登録 (ToDoList.Read など)。 まだ行っていない場合は、サンプルの iOS モバイルアプリで API を呼び出し、機能保護された ASP.NET Core Web API を持つための 手順に従ってください。 次の手順を完了していることを確認します。
- Web API アプリケーションを登録します。
- API スコープを構成します。
- アプリ ロールを構成します。
- 省略可能な要求を構成します。
- サンプル Web API を複製またはダウンロードします。
- サンプル Web API を構成して実行します。
API の呼び出し
iOS アプリから保護された Web API を呼び出すには、次のコードを使用します。
func getContentWithToken() {
// Specify the API endpoint in _Configuration.swift_ file you created earlier
guard let url = URL(string: Configuration.kProtectedAPIEndpoint) else {
let errorMessage = "Invalid API url"
print(errorMessage)
updateLogging(text: errorMessage)
return
}
var request = URLRequest(url: url)
// Set the Authorization header for the request. We use Bearer tokens, so we specify Bearer + the token we got from the result
request.setValue("Bearer \(self.accessToken)", forHTTPHeaderField: "Authorization")
self.updateLogging(text: "Performing request...")
URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
self.updateLogging(text: "Couldn't get API result: \(error)")
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode)
else {
self.updateLogging(text: "Couldn't get API result: \(error)")
return
}
guard let data = data, let result = try? JSONSerialization.jsonObject(with: data, options: []) else {
self.updateLogging(text: "Couldn't deserialize result JSON")
return
}
self.updateLogging(text: """
Accessed API successfully using access token.
HTTP response code: \(httpResponse.statusCode)
HTTP response body: \(result)
""")
}.resume()
}
このコードでは、API エンドポイントを指定し、その有効性を確認します。 次に、要求オブジェクトを構築し、取得したアクセス トークンを使用して承認ヘッダーを設定します。 要求の開始をログに記録した後、URLSession
を使用して非同期的に要求を実行します。
完了後、要求中にエラーが発生したかどうかを確認します。 エラーが発生すると、対応するメッセージがログに記録されます。 次に、HTTP 応答の成功を検証し、200 から 299 の状態コードの範囲内であることを確認します。 その後、受信した JSON データを逆シリアル化します。 最後に、ログ テキストが更新され、API への正常なアクセスと関連する HTTP 応答の詳細が示されます。
関連コンテンツ
- サンプルのiOS (Swift)モバイルアプリでユーザーにログインさせる
- ネイティブ認証 を使用して、サンプル iOS モバイル アプリでユーザーをサインインさせて API を呼び出す
- チュートリアル: ネイティブ認証 用に iOS/macOS アプリを準備する