チュートリアル: 保護された API を呼び出して結果を表示する

前のチュートリアルでは、サインインとサインアウトのエクスペリエンスをアプリケーションに追加しました。 次に、これらの機能に基づいて、サインインしているユーザーが保護された Web API を呼び出せるようにすることができます。 このチュートリアルでは、Microsoft Graph API を呼び出して、ログインしているユーザーのプロファイル情報を表示します。

このチュートリアルでは、次の作業を行います。

  • 保護されたダウンストリーム API を呼び出すコードを追加する
  • アプリケーションの実行とテスト

API を呼び出して結果を表示する

保護された API を呼び出すには、まず、次のように auth.get_token_for_user を呼び出して現在のユーザーのアクセス トークンを取得する必要があります。

@app.route("/call_downstream_api")
def call_downstream_api():
    token = auth.get_token_for_user(app_config.SCOPE)
    if "error" in token:
        return redirect(url_for("login"))
    # Use access token to call downstream api
    api_result = requests.get(
        app_config.ENDPOINT,
        headers={'Authorization': 'Bearer ' + token['access_token']},
        timeout=30,
    ).json()
    return render_template('display.html', result=api_result)

ユーザーが /call_downstream_api URL ルートに移動すると、Flask は call_downstream_api() 関数を呼び出します。これは、最初に auth.get_token_for_user(app_config.SCOPE) を使ってアクセス トークンの取得を試みます。 認証の問題やトークンのエラーが発生した場合は、再認証のためにユーザーをサインイン ページにリダイレクトします。

アプリがアクセス トークンを正常に取得できた場合は、requests.get(...) メソッドを使ってダウンストリーム API への HTTP 要求を行います。 要求で、ダウンストリーム API の URL は app_config.ENDPOINT で指定されます。 また、要求ヘッダーの Authorization フィールドでアクセス トークンを渡します。

ダウンストリーム API (Microsoft Graph API) への要求が成功すると、api_result 変数に格納された JSON 応答が返され、レンダリングのために display.html テンプレートに渡されます。

アプリを実行するコードを追加する

アプリを実行するには、app.py ファイルの末尾に次のコード スニペットを追加します。

if __name__ == "__main__":
    app.run()

アプリをテストする

次の手順に従って、Web アプリ内のサインイン、API 呼び出し、サインアウトの各エクスペリエンスをテストします。

  1. まだ行っていない場合は、.env.sample ファイル内のプレースホルダーの値を、Microsoft Entra アプリ登録の詳細情報 (クライアント ID、クライアント シークレット、機関の URL) に置き換えます

  2. アプリの仮想環境を作成します。

    py -m venv .venv
    .venv\scripts\activate
    
  3. pip を使用して要件をインストールします。

    pip install -r requirements.txt
    
  4. コマンド ラインでアプリを実行します。 前に構成したリダイレクト URI と同じポートでアプリが実行されていることを確認します。

    flask run --host=localhost --port=5000
    
  5. ターミナルに表示される https の URL (例: https://localhost:5000) をコピーし、ブラウザーに貼り付けます。 ブラウザーのプライベート セッションまたはシークレット セッションを使用することを推奨します。

  6. サインイン ウィンドウが表示されたら、サインインに使うアカウントを指定し、[次へ] を選択します。

    サインイン画面を示すスクリーンショット。

  7. アカウントのパスワードを入力するようにブラウザーがリダイレクトされます。 パスワードを入力して、[サインイン] を選択します。

    ご自身の組織が要求するセキュリティ情報によっては、この時点でサインイン フローが異なる可能性があります。たとえば、認証アプリを使用した多要素認証などです。

  8. [サインイン状態を維持] には [いいえ] または [はい] を選択できます。

  9. アプリケーションから、アクセス権を付与したデータへのアクセスを維持し、サインインしてプロファイルを読み取るためのアクセス許可を要求されます。 [同意する] を選択し、これらのアクセス許可に同意します。

  10. ユーザーがアプリケーションにサインインしたことを示す、次のスクリーンショットが表示されます。

    サインインしたユーザーを示すスクリーンショット。

  11. 保護された API を呼び出して結果を表示するには、[ダウンストリーム API の呼び出し] を選択します。 Microsoft Graph API の呼び出しが成功すると、次のようにサインインしているユーザーに関する情報が返されます。

    成功した API 呼び出しの結果を示すスクリーンショット。

アプリからサインアウトする

  1. [ログアウト] を選択し、アプリからサインアウトします。
  2. サインアウトするアカウントを選択するように要求されます。 サインインに使用したアカウントを選択します。
  3. サインアウトしたことを示すメッセージが表示されます。ブラウザー ウィンドウを閉じます。

関連項目

作成したアプリでは、ID ライブラリを使用しています。このライブラリによって、Python 用 Microsoft Authentication Library (MSAL) のほとんどの詳細が抽象化されます。 さまざまなシナリオで MSAL Python を使う方法について詳しくは、MSAL Python のドキュメントを参照してください。