チュートリアル: iOS (Swift) アプリで保護された Web API を呼び出す

これは、Microsoft Entra 外部 ID を使用してユーザーをサインインさせ、保護された Web API を呼び出す方法について説明するチュートリアル シリーズの 4 番目のチュートリアルです。

このチュートリアルでは、次のことについて説明します。

  • 保護された Web API を呼び出します。

前提条件

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

  • 少なくとも 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 応答の詳細を示します。