次の方法で共有


ブローカー認証を使用したローカル開発時に Azure サービスに対して Python アプリを認証する

ブローカー認証では、システム認証ブローカーを使用してユーザー資格情報を収集し、アプリを認証します。 システム認証ブローカーは、接続されているすべてのアカウントの認証ハンドシェイクとトークンメンテナンスを管理するユーザーのマシンで実行されているアプリです。

ブローカー認証には、次の利点があります。

  • シングル Sign-On (SSO) を有効にします。 アプリを使用すると、ユーザーが Microsoft Entra ID を使用して認証する方法を簡略化し、流出や誤用から Microsoft Entra ID 更新トークンを保護できます。
  • セキュリティ強化: 多くのセキュリティ強化がブローカーと共に提供され、アプリ ロジックを更新する必要はありません。
  • 強化された機能のサポート: ブローカーの助けを借りて、開発者は豊富な OS とサービス機能にアクセスできます。
  • システム統合: 組み込みのアカウント ピッカーでブローカー のプラグ アンド プレイを使用するアプリケーションにより、ユーザーは同じ資格情報を何度も再入力する代わりに、既存のアカウントをすばやく選択できます。
  • トークン保護: 更新トークンがデバイスバインドされ、アプリがデバイスバインドされたアクセス トークンを取得できるようにします。 「トークン保護」を参照してください。

Windows には、 Web アカウント マネージャー (WAM) と呼ばれる認証ブローカーが用意されています。 WAM を使用すると、Microsoft Entra ID などの ID プロバイダーが OS にネイティブにプラグインし、セキュリティで保護されたログイン サービスをアプリに提供できます。 ブローカー認証を使用すると、対話型ログイン資格情報によって許可されるすべての操作に対してアプリが有効になります。

個人の Microsoft アカウントと職場または学校アカウントがサポートされています。 サポートされている Windows バージョンでは、既定のブラウザー ベースの UI は、組み込みの Windows アプリと同様に、よりスムーズな認証エクスペリエンスに置き換えられます。

macOS には、組み込みの認証ブローカーがネイティブに含まれていません。 Azure Identity クライアント ライブラリは、プラットフォーム固有のメカニズムを使用してブローカー認証機能を実装し、デバイスが管理されている場合に Microsoft ポータル サイトなどのアプリと統合される場合があります。 詳細については、 Apple デバイス用の Microsoft Enterprise SSO プラグインに関するページを参照してください。

Linux では、Linux 用の Microsoft シングル サインオン を認証ブローカーとして使用します。

ブローカー認証用にアプリを構成する

アプリケーションでブローカー認証を有効にするには、次の手順に従います。

  1. Azure portalMicrosoft Entra ID に移動し、左側のメニューで [アプリの登録] を選択します。

  2. アプリの登録を選択し、[ 認証] を選択します。

  3. プラットフォーム構成を使用して、アプリ登録に適切なリダイレクト URI を追加します。

    1. [ プラットフォームの構成] で、[ + プラットフォームの追加] を選択します。

    2. [ プラットフォームの構成] で、アプリケーションの種類 (プラットフォーム) のタイルを選択して、 モバイル アプリケーションやデスクトップ アプリケーションなどの設定を構成します。

    3. [カスタム リダイレクト URI] に、プラットフォームの次のリダイレクト URI を入力します。

      Platform リダイレクト URI
      Windows 10 以降または WSL ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}
      macOS msauth.com.msauth.unsignedapp://auth 署名されていないアプリの場合
      msauth.{bundle_id}://auth 署名済みアプリの場合
      Linux https://login.microsoftonline.com/common/oauth2/nativeclient

      {your_client_id}または{bundle_id}を、アプリ登録の [概要] ウィンドウのアプリケーション (クライアント) ID に置き換えます。

    4. 設定を選択します。

    詳細については、「 アプリの登録にリダイレクト URI を追加する」を参照してください。

  4. [認証] ウィンドウに戻り、[詳細設定] で [パブリック クライアント フローを許可する] で [はい] を選択します。

  5. [保存] をクリックして変更を適用します。

  6. 特定のリソースに対してアプリケーションを承認するには、対象のリソースに移動し、[ API のアクセス許可] を選択して、 アクセスする Microsoft Graph やその他のリソースを有効にします。

    Important

    また、初めてサインインするときにアプリケーションに同意を付与するには、テナントの管理者である必要があります。

ロールを割り当てる

ブローカー認証でアプリ コードを正常に実行するには、 Azure ロールベースのアクセス制御 (RBAC) を使用してユーザー アカウントのアクセス許可を付与します。 関連する Azure サービスのユーザー アカウントに適切なロールを割り当てます。 例えば次が挙げられます。

  • Azure Blob Storage: ストレージ アカウント データ共同作成者 ロールを割り当てます。
  • Azure Key Vault: Key Vault Secrets Officer ロールを 割り当てます。

アプリを指定する場合は、 user_impersonation Access Azure Storage に対して API アクセス許可が設定されている必要があります (前のセクションの手順 6)。 この API アクセス許可を使用すると、サインイン中に同意が付与された後、サインインしたユーザーに代わってアプリが Azure Storage にアクセスできるようになります。

コードを実装する

次の例は、InteractiveBrowserBrokerCredential を使用して BlobServiceClient により認証する方法を示しています。

  1. パッケージをインストールします。 pywin32 は、現在フォアグラウンドにあるウィンドウを取得するために Windows で使用されます。

    pip install azure-identity-broker pywin32
    
  2. アカウント ピッカー ダイアログが表示される親ウィンドウへの参照を取得します。 次のコード例では、これは行になります。

    current_window_handle = win32gui.GetForegroundWindow()
    
  3. 親ウィンドウ参照を渡す InteractiveBrowserBrokerCredential のインスタンスを作成します。 最後のコード例では、次の行になります。

    credential = InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handle)
    
  4. credentialを使用して、この例の Blob Storage である Azure サービスにアクセスします。

最後のコード例を次に示します。

import win32gui
from azure.identity.broker import InteractiveBrowserBrokerCredential
from azure.storage.blob import BlobServiceClient

# Get the handle of the current window
current_window_handle = win32gui.GetForegroundWindow()

# To authenticate and authorize with an app, use the following line to get a credential and
# substitute the <app_id> and <tenant_id> placeholders with the values for your app and tenant.
# credential = InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handle, client_id=<app_id>, tenant_id=<tenant_id>)
credential = InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handle)
client = BlobServiceClient("https://<storage-account-name>.blob.core.windows.net/", credential=credential)

# Prompt for credentials appears on first use of the client
for container in client.list_containers():
    print(container.name)

タイムアウトの設定など、より正確な制御を行うには、InteractiveBrowserBrokerCredentialなどのtimeoutに特定の引数を指定できます。

コードを正常に実行するには、ストレージ アカウント データ共同作成者などの BLOB コンテナーへのアクセスを許可するストレージ アカウントに対する Azure ロールがユーザー アカウントに割り当てられている必要があります。 アプリを指定する場合は、 user_impersonation Access Azure Storage に対して API アクセス許可が設定されている必要があります (前のセクションの手順 6)。 この API アクセス許可を使用すると、サインイン中に同意が付与された後、サインインしたユーザーに代わってアプリが Azure Storage にアクセスできるようになります。

次のスクリーンショットは、代替の対話型のブローカー認証エクスペリエンスを示しています。

ブローカー対応の InteractiveBrowserCredential インスタンスを使用してユーザーを認証するときの Windows サインイン エクスペリエンスを示すスクリーンショット。

Important

macOS のサポートは、 azure-identity-broker バージョン 1.3.0 以降に存在します。

次の例では、 InteractiveBrowserBrokerCredential を使用して BlobServiceClientで認証する方法を示します。

  1. パッケージをインストールします。 msal (Microsoft 認証ライブラリ) は、 parent_window_handle パラメーターの定数を指定するために使用されます。

    pip install azure-identity-broker msal
    
  2. 親ウィンドウ参照を渡す InteractiveBrowserBrokerCredential のインスタンスを作成します。 そのためには、アカウント ピッカー ダイアログが表示される親ウィンドウへの参照を取得する必要があります ( msal モジュールによって提供されます)。 次のコード例では、これは行になります。

    credential = InteractiveBrowserBrokerCredential(
        parent_window_handle=msal.PublicClientApplication.CONSOLE_WINDOW_HANDLE
    )
    
  3. credentialを使用して、この例の Blob Storage である Azure サービスにアクセスします。

最後のコード例を次に示します。

from azure.identity.broker import InteractiveBrowserBrokerCredential
from azure.storage.blob import BlobServiceClient
import msal

credential = InteractiveBrowserBrokerCredential(
    parent_window_handle=msal.PublicClientApplication.CONSOLE_WINDOW_HANDLE
)

client = BlobServiceClient("https://<storage-account-name>.blob.core.windows.net/", credential=credential)

# Prompt for credentials appears on first use of the client
for container in client.list_containers():
    print(container.name)

macOS 上の認証ブローカーで MSAL Python を使用する方法の詳細については、「 macOS での認証ブローカーでの MSAL Python の使用」を参照してください。

タイムアウトの設定など、より正確な制御を行うには、InteractiveBrowserBrokerCredentialなどのtimeoutに特定の引数を指定できます。

コードを正常に実行するには、ストレージ アカウント データ共同作成者などの BLOB コンテナーへのアクセスを許可するストレージ アカウントに対する Azure ロールがユーザー アカウントに割り当てられている必要があります。 アプリを指定する場合は、 user_impersonation Access Azure Storage に対して API アクセス許可が設定されている必要があります (前のセクションの手順 6)。 この API アクセス許可を使用すると、サインイン中に同意が付与された後、サインインしたユーザーに代わってアプリが Azure Storage にアクセスできるようになります。

次のスクリーンショットは、代替の対話型のブローカー認証エクスペリエンスを示しています。

ブローカー対応 InteractiveBrowserCredential インスタンスを使用してユーザーを認証するときの macOS サインイン エクスペリエンスを示すスクリーンショット。

Important

Linux サポートは、 azure-identity-broker バージョン 1.3.0 以降に存在します。

次の例は、InteractiveBrowserBrokerCredential を使用して BlobServiceClient により認証する方法を示しています。

  1. パッケージをインストールします。 msal (Microsoft 認証ライブラリ) は、 parent_window_handle パラメーターの定数を指定するために使用されます。

    pip install azure-identity-broker msal
    
  2. 親ウィンドウ参照を渡す InteractiveBrowserBrokerCredential のインスタンスを作成します。 そのためには、アカウント ピッカー ダイアログが表示される親ウィンドウへの参照を取得する必要があります ( msal モジュールによって提供されます)。 次のコード例では、これは行になります。

    credential = InteractiveBrowserBrokerCredential(
        parent_window_handle=msal.PublicClientApplication.CONSOLE_WINDOW_HANDLE
    )
    
  3. credentialを使用して、この例の Blob Storage である Azure サービスにアクセスします。

最後のコード例を次に示します。

from azure.identity.broker import InteractiveBrowserBrokerCredential
from azure.storage.blob import BlobServiceClient
import msal

credential = InteractiveBrowserBrokerCredential(
    parent_window_handle=msal.PublicClientApplication.CONSOLE_WINDOW_HANDLE
)

client = BlobServiceClient("https://<storage-account-name>.blob.core.windows.net/", credential=credential)

# Prompt for credentials appears on first use of the client
for container in client.list_containers():
    print(container.name)

このコード例を実行する前に、Linux ディストリビューションに Linux 依存関係 がインストールされていることを確認してください。 また、WSL の手順はディストリビューションによって なります。

タイムアウトの設定など、より正確な制御を行うには、InteractiveBrowserBrokerCredentialなどのtimeoutに特定の引数を指定できます。

コードを正常に実行するには、ストレージ アカウント データ共同作成者などの BLOB コンテナーへのアクセスを許可するストレージ アカウントに対する Azure ロールがユーザー アカウントに割り当てられている必要があります。 アプリを指定する場合は、 user_impersonation Access Azure Storage に対して API アクセス許可が設定されている必要があります (前のセクションの手順 6)。 この API アクセス許可を使用すると、サインイン中に同意が付与された後、サインインしたユーザーに代わってアプリが Azure Storage にアクセスできるようになります。

次のビデオでは、代替の対話型の仲介型認証エクスペリエンスを示します。

ブローカー対応 InteractiveBrowserCredential インスタンスを使用してユーザーを認証するときの Linux サインイン エクスペリエンスを示すアニメーション GIF。