.NET を使用した Azure Key Vault に対するサービス間認証Service-to-service authentication to Azure Key Vault using .NET

Azure Key Vault に対する認証を行うには、Azure Active Directory (Azure AD) の資格情報として、共有シークレットまたは証明書のいずれかが必要です。To authenticate to Azure Key Vault, you need an Azure Active Directory (Azure AD) credential, either a shared secret or a certificate.

このような資格情報を管理することは困難な場合があります。Managing such credentials can be difficult. 資格情報をソース ファイルまたは構成ファイルに含めて、アプリにバンドルしたくなります。It's tempting to bundle credentials into an app by including them in source or configuration files. .NET 用の Microsoft.Azure.Services.AppAuthentication ライブラリを使うと、この問題が簡略化されます。The Microsoft.Azure.Services.AppAuthentication for .NET library simplifies this problem. これにより、ローカルでの開発中は認証に開発者の資格情報が使用されます。It uses the developer's credentials to authenticate during local development. その後、ソリューションを Azure にデプロイすると、このライブラリは、自動的にアプリケーションの資格情報に切り替わります。When the solution is later deployed to Azure, the library automatically switches to application credentials. ローカル開発時に開発者の資格情報を使用すると、Azure AD 資格情報を作成したり、開発者間で資格情報を共有したりする必要がないため、より安全です。Using developer credentials during local development is more secure because you don't need to create Azure AD credentials or share credentials between developers.

Microsoft.Azure.Services.AppAuthentication ライブラリで認証が自動的に管理されます。これにより、資格情報ではなく、ソリューションに重点を置くことができます。The Microsoft.Azure.Services.AppAuthentication library manages authentication automatically, which in turn lets you focus on your solution, rather than your credentials. これは、Microsoft Visual Studio、Azure CLI、Azure AD の統合認証を使用したローカル開発をサポートしています。It supports local development with Microsoft Visual Studio, Azure CLI, or Azure AD Integrated Authentication. マネージド ID をサポートする Azure リソースにデプロイすると、ライブラリでは Azure リソースのマネージド ID が自動的に使用されます。When deployed to an Azure resource that supports a managed identity, the library automatically uses managed identities for Azure resources. コードまたは構成を変更する必要はありません。No code or configuration changes are required. マネージド ID を利用できない場合や、ローカル開発中に開発者のセキュリティ コンテキストを特定できない場合、ライブラリでは、Azure AD のクライアントの資格情報を直接使用することもサポートされます。The library also supports direct use of Azure AD client credentials when a managed identity isn't available, or when the developer's security context can't be determined during local development.

前提条件Prerequisites

  • Visual Studio 2019 または Visual Studio 2017 v15.5.Visual Studio 2019 or Visual Studio 2017 v15.5.

  • Visual Studio 用のアプリ認証拡張機能。Visual Studio 2017 Update 5 用の個別の拡張機能として入手可能であり、Update 6 以降の製品にはバンドルされています。The App Authentication extension for Visual Studio, available as a separate extension for Visual Studio 2017 Update 5 and bundled with the product in Update 6 and later. Update 6 以降では、Visual Studio インストーラー内から [Azure Development tools](Azure 開発ツール) を選択して、アプリ認証拡張機能のインストールを確認できます。With Update 6 or later, you can verify the installation of the App Authentication extension by selecting Azure Development tools from within the Visual Studio installer.

ライブラリの使用Using the library

.NET アプリケーションの場合、マネージド ID を利用する最も簡単な方法は、Microsoft.Azure.Services.AppAuthentication パッケージを経由する方法です。For .NET applications, the simplest way to work with a managed identity is through the Microsoft.Azure.Services.AppAuthentication package. 次のようにして使い始めることができます。Here's how to get started:

  1. [ツール] > [NuGet パッケージ マネージャー] > [ソリューションの NuGet パッケージの管理] を選択して、Microsoft.Azure.Services.AppAuthentication および Microsoft.Azure.KeyVault NuGet パッケージに対する参照をプロジェクトに追加します。Select Tools > NuGet Package Manager > Manage NuGet Packages for Solution to add references to the Microsoft.Azure.Services.AppAuthentication and Microsoft.Azure.KeyVault NuGet packages to your project.

  2. 次のコードを追加します。Add the following code:

    using Microsoft.Azure.Services.AppAuthentication;
    using Microsoft.Azure.KeyVault;
    
    // Instantiate a new KeyVaultClient object, with an access token to Key Vault
    var azureServiceTokenProvider1 = new AzureServiceTokenProvider();
    var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider1.KeyVaultTokenCallback));
    
    // Optional: Request an access token to other Azure services
    var azureServiceTokenProvider2 = new AzureServiceTokenProvider();
    string accessToken = await azureServiceTokenProvider2.GetAccessTokenAsync("https://management.azure.com/").ConfigureAwait(false);
    

AzureServiceTokenProvider クラスは、トークンをメモリ内にキャッシュし、有効期限の直前に Azure AD から取得します。The AzureServiceTokenProvider class caches the token in memory and retrieves it from Azure AD just before expiration. そのため、GetAccessTokenAsync メソッドを呼び出す前に有効期限を確認する必要がなくなります。So, you no longer have to check the expiration before calling the GetAccessTokenAsync method. トークンが必要になった時点で、いつでもメソッドを呼び出すことができます。Just call the method when you want to use the token.

GetAccessTokenAsync メソッドには、リソース識別子が必要です。The GetAccessTokenAsync method requires a resource identifier. Microsoft Azure サービスの詳細については、「Azure リソースのマネージド ID とは」を参照してください。To learn more about Microsoft Azure services, see What is managed identities for Azure resources.

ローカル開発用における認証Local development authentication

ローカル開発向けの主な認証シナリオには、Azure サービスに対する認証カスタム サービスに対する認証の 2 つがあります。For local development, there are two primary authentication scenarios: authenticating to Azure services, and authenticating to custom services.

Azure サービスに対する認証Authenticating to Azure Services

ローカル コンピューターでは、Azure リソースのマネージド ID はサポートされません。Local machines don't support managed identities for Azure resources. その結果、Microsoft.Azure.Services.AppAuthentication ライブラリは、ローカル開発環境で実行するために開発者の資格情報を使用します。As a result, the Microsoft.Azure.Services.AppAuthentication library uses your developer credentials to run in your local development environment. ソリューションを Azure にデプロイすると、このライブラリは、マネージド ID を使用して OAuth 2.0 クライアント資格情報の付与フローに切り替えます。When the solution is deployed to Azure, the library uses a managed identity to switch to an OAuth 2.0 client credential grant flow. この方法では、同じコードをローカルでもリモートでも、心配せずにテストできます。This approach means you can test the same code locally and remotely without worry.

ローカル開発では、AzureServiceTokenProvider は、Visual StudioAzure コマンド ライン インターフェイス (CLI)、Azure AD 統合認証を使用してトークンをフェッチします。For local development, AzureServiceTokenProvider fetches tokens using Visual Studio, Azure command-line interface (CLI), or Azure AD Integrated Authentication. このライブラリは、各オプションを順番に試行し、最初に成功したオプションを使用します。Each option is tried sequentially and the library uses the first option that succeeds. どのオプションも機能しない場合、詳しい情報と共に AzureServiceTokenProviderException 例外がスローされます。If no option works, an AzureServiceTokenProviderException exception is thrown with detailed information.

Visual Studio での認証Authenticating with Visual Studio

Visual Studio を使用して認証するには:To authenticate by using Visual Studio:

  1. Visual Studio にサインインし、 [ツール]  >  [オプション] を使用して [オプション] を開きます。Sign in to Visual Studio and use Tools > Options to open Options.

  2. [Azure サービス認証] を選択し、ローカル開発用のアカウントを選んでから [OK] を選択します。Select Azure Service Authentication, choose an account for local development, and select OK.

トークン プロバイダー ファイルに関連するエラーなど、Visual Studio の使用に関して問題が発生した場合は、前述の手順をよくご確認ください。If you run into problems using Visual Studio, such as errors that involve the token provider file, carefully review the preceding steps.

開発者トークンの再認証が必要になる場合があります。You may need to reauthenticate your developer token. これを行うには、 [ツール]  >  [オプション] の順に選択し、 [Azure サービス認証]  を選びます。To do so, select Tools > Options, and then select Azure Service Authentication. 選択したアカウントの下にある [再認証] リンクを探します。Look for a Re-authenticate link under the selected account. それを選択して認証してください。Select it to authenticate.

Azure CLI での認証Authenticating with Azure CLI

ローカル開発で Azure CLI を使用する場合は、バージョンが Azure CLI v 2.0.12 以降であることを確認してください。To use Azure CLI for local development, be sure you have version Azure CLI v2.0.12 or later.

Azure CLI を使用するには:To use Azure CLI:

  1. Windows タスクバーで Azure CLI を検索して、Microsoft Azure コマンド プロンプトを開きます。Search for Azure CLI in the Windows Taskbar to open the Microsoft Azure Command Prompt.

  2. Azure portal にサインインします。az login で Azure にサインインします。Sign in to the Azure portal: az login to sign in to Azure.

  3. az account get-access-token --resource https://vault.azure.net 」と入力して、アクセスを確認します。Verify access by entering az account get-access-token --resource https://vault.azure.net. エラーが発生した場合は、適切なバージョンの Azure CLI が正しくインストールされていることを確認してください。If you receive an error, check that the right version of Azure CLI is correctly installed.

    Azure CLI が既定のディレクトリにインストールされていない場合は、AzureServiceTokenProvider で Azure CLI のパスが見つけられないことを報告するエラーが発生することがあります。If Azure CLI isn't installed to the default directory, you may receive an error reporting that AzureServiceTokenProvider can't find the path for Azure CLI. AzureCLIPath 環境変数を使用して、Azure CLI のインストール フォルダーを定義してください。Use the AzureCLIPath environment variable to define the Azure CLI installation folder. AzureServiceTokenProvider は、必要な場合に、AzureCLIPath 環境変数に指定されたディレクトリを Path 環境変数に追加します。AzureServiceTokenProvider adds the directory specified in the AzureCLIPath environment variable to the Path environment variable when necessary.

  4. 複数のアカウントを使用して Azure CLI にサインインしている場合、または使用しているアカウントで複数のサブスクリプションにアクセスできる場合は、使用するサブスクリプションを指定する必要があります。If you're signed in to Azure CLI using multiple accounts or your account has access to multiple subscriptions, you need to specify the subscription to use. コマンド「az account set --subscription 」を入力します。Enter the command az account set --subscription .

このコマンドは、エラーが発生した場合にのみ出力を生成します。This command generates output only on failure. 現在のアカウント設定を確認するには、コマンド az account list を入力します。To verify the current account settings, enter the command az account list.

Azure AD 認証を使用した認証Authenticating with Azure AD authentication

Azure AD の認証を使用するには、次の点を確認します。To use Azure AD authentication, verify that:

カスタム サービスに対する認証Authenticating to custom services

サービスから Azure サービスを呼び出すとき、Azure サービスがユーザーとアプリケーションの両方にアクセスすることを許可するので、前の手順が動作します。When a service calls Azure services, the previous steps work because Azure services allow access to both users and applications.

カスタム サービスを呼び出すサービスを作成するときには、ローカル開発における認証に Azure AD のクライアント資格情報を使用します。When creating a service that calls a custom service, use Azure AD client credentials for local development authentication. 2 つのオプションがあります。There are two options:

  • 次のようにサービス プリンシパルを使用して Azure にサインインします。Use a service principal to sign into Azure:

    1. サービス プリンシパルを作成する。Create a service principal. 詳細については、「Azure CLI で Azure サービス プリンシパルを作成する」をご覧ください。For more information, see Create an Azure service principal with Azure CLI.

    2. Azure CLI を使用して、次のコマンドでサインインします。Use Azure CLI to sign in with the following command:

      az login --service-principal -u <principal-id> --password <password> --tenant <tenant-id> --allow-no-subscriptions
      

      サービス プリンシパルには、サブスクリプションへのアクセス権がない可能性があるため、--allow-no-subscriptions 引数を使用します。Because the service principal may not have access to a subscription, use the --allow-no-subscriptions argument.

  • 環境変数を使用して、サービス プリンシパルの詳細を指定します。Use environment variables to specify service principal details. 詳細については、「サービス プリンシパルを使用してアプリケーションを実行する」を参照してください。For more information, see Running the application using a service principal.

Azure にサインインした後、AzureServiceTokenProvider ではサービス プリンシパルを使用して、ローカル開発用のトークンを取得します。After you've signed in to Azure, AzureServiceTokenProvider uses the service principal to retrieve a token for local development.

この方法は、ローカル開発に対してのみ適用されます。This approach applies only to local development. ソリューションを Azure にデプロイすると、ライブラリは管理 ID 認証に切り替わります。When your solution is deployed to Azure, the library switches to a managed identity for authentication.

マネージド ID またはユーザー割り当て ID を使用してアプリケーションを実行するRunning the application using managed identity or user-assigned identity

Azure App Service 上またはマネージド ID が有効な Azure VM 上でコードを実行すると、ライブラリは自動的にマネージド ID を使用します。When you run your code on an Azure App Service or an Azure VM with a managed identity enabled, the library automatically uses the managed identity. コードの変更は必要ありませんが、マネージド ID にはキー コンテナーに対する get アクセス許可が必要です。No code changes are required, but the managed identity must have get permissions for the key vault. キー コンテナーのアクセス ポリシーを通して、マネージド ID に get アクセス許可を付与できます。You can give the managed identity get permissions through the key vault's Access Policies.

また、ユーザー割り当て ID を使用して認証することもできます。Alternatively, you may authenticate with a user-assigned identity. ユーザー割り当て ID の詳細については、「Azure リソースのマネージド ID とは」を参照してください。For more information on user-assigned identities, see About Managed Identities for Azure resources. ユーザー割り当て ID を使用して認証するには、接続文字列内でユーザー割り当て ID のクライアント ID を指定する必要があります。To authenticate with a user-assigned identity, you need to specify the Client ID of the user-assigned identity in the connection string. 接続文字列は、「接続文字列のサポート」で指定されています。The connection string is specified in Connection String Support.

サービス プリンシパルを使用してアプリケーションを実行するRunning the application using a Service Principal

認証のために、Azure AD のクライアント資格情報を作成する必要がある場合があります。It may be necessary to create an Azure AD Client credential to authenticate. この状況は、次の例で発生する可能性があります。This situation may happen in the following examples:

  • コードはローカル開発環境で実行されるが、開発者の ID の下ではない。Your code runs on a local development environment, but not under the developer's identity. たとえば、Service Fabric では、ローカル開発用に NetworkService アカウントを使用します。Service Fabric, for example, uses the NetworkService account for local development.

  • コードはローカル開発環境で実行されるが、開発者自身はカスタム サービスに対して認証を行っているため、自分の開発者 ID は使用できない。Your code runs on a local development environment and you authenticate to a custom service, so you can't use your developer identity.

  • コードが、Azure Batch など、Azure リソースのマネージド ID がまだサポートされていない Azure コンピューティング リソース上で実行されている。Your code is running on an Azure compute resource that doesn't yet support managed identities for Azure resources, such as Azure Batch.

サービス プリンシパルを使用してアプリケーションを実行する方法は、主に 3 つあります。There are three primary methods of using a Service Principal to run your application. そのいずれかを使用するには、最初にサービス プリンシパルを作成する必要があります。To use any of them, you must first create a service principal. 詳細については、「Azure CLI で Azure サービス プリンシパルを作成する」をご覧ください。For more information, see Create an Azure service principal with Azure CLI.

ローカル キーストア内の証明書を使用して Azure AD にサインインするUse a certificate in local keystore to sign into Azure AD

  1. Azure CLI の az ad sp create-for-rbac コマンドを使用してサービス プリンシパル証明書を作成します。Create a service principal certificate using the Azure CLI az ad sp create-for-rbac command.

    az ad sp create-for-rbac --create-cert
    

    このコマンドでは、ホーム ディレクトリに格納される .pem ファイル (秘密キー) が作成されます。This command creates a .pem file (private key) that's stored in your home directory. LocalMachine または CurrentUser ストアのいずれかに、この証明書をデプロイします。Deploy this certificate to either the LocalMachine or CurrentUser store.

    重要

    この CLI コマンドによって .pem ファイルが生成されますが、Windows で提供されるネイティブ サポートの対象は PFX 証明書のみです。The CLI command generates a .pem file, but Windows only provides native support for PFX certificates. 代わりに PFX 証明書を生成するには、こちらに示されている PowerShell コマンドを使用してください: 「自己署名証明書を使用したサービス プリンシパルの作成」。To generate a PFX certificate instead, use the PowerShell commands shown here: Create service principal with self-signed certificate. これらのコマンドを実行すると、証明書も自動的にデプロイされます。These commands automatically deploy the certificate as well.

  2. AzureServicesAuthConnectionString という名前の環境変数を次の値に設定します。Set an environment variable named AzureServicesAuthConnectionString to the following value:

    RunAs=App;AppId={AppId};TenantId={TenantId};CertificateThumbprint={Thumbprint};
          CertificateStoreLocation={CertificateStore}
    

    {AppId}{TenantId}{Thumbprint} は、手順 1 で生成された値に置き換えます。Replace {AppId}, {TenantId}, and {Thumbprint} with values generated in Step 1. デプロイ計画に基づき、 {CertificateStore}LocalMachine または CurrentUser のいずれかで置き換えます。Replace {CertificateStore} with either LocalMachine` or CurrentUser, based on your deployment plan.

  3. アプリケーションを実行します。Run the application.

共有シークレット資格情報を使用して Azure AD にサインインするUse a shared secret credential to sign into Azure AD

  1. Azure CLI の az ad sp create-for-rbac コマンドを --sdk-auth パラメーターと共に使用して、パスワードでサービス プリンシパル証明書を作成します。Create a service principal certificate with a password using the Azure CLI az ad sp create-for-rbac command with the --sdk-auth parameter.

    az ad sp create-for-rbac --sdk-auth
    
  2. AzureServicesAuthConnectionString という名前の環境変数を次の値に設定します。Set an environment variable named AzureServicesAuthConnectionString to the following value:

    RunAs=App;AppId={AppId};TenantId={TenantId};AppKey={ClientSecret}
    

    {AppId}{TenantId}{ClientSecret} は、手順 1 で生成された値に置き換えます。Replace {AppId}, {TenantId}, and {ClientSecret} with values generated in Step 1.

  3. アプリケーションを実行します。Run the application.

すべてを適切に設定した後は、それ以上のコード変更は必要ありません。Once everything's set up correctly, no further code changes are necessary. AzureServiceTokenProvider では、環境変数と証明書を使用して Azure AD に対する認証が行われます。AzureServiceTokenProvider uses the environment variable and the certificate to authenticate to Azure AD.

Key Vault 内の証明書を使用して Azure AD にサインインするUse a certificate in Key Vault to sign into Azure AD

このオプションでは、サービス プリンシパルのクライアント証明書を Key Vault に格納し、それをサービス プリンシパルの認証に使用できます。This option lets you store a service principal's client certificate in Key Vault and use it for service principal authentication. このオプションは、次のシナリオに利用できます。You may use this option for the following scenarios:

  • 明示的なサービス プリンシパルを使用して認証すると共に、サービス プリンシパル資格情報を安全な状態でキー コンテナー内に保管しておくことが必要なローカル認証。Local authentication, where you want to authenticate using an explicit service principal, and want to keep the service principal credential securely in a key vault. 開発者アカウントからキー コンテナーにアクセスできる必要があります。Developer account must have access to the key vault.

  • 明示的な資格情報を使用すると共に、サービス プリンシパル資格情報を安全な状態でキー コンテナー内に保管しておくことが必要な Azure からの認証。Authentication from Azure where you want to use explicit credential and want to keep the service principal credential securely in a key vault. クロステナント シナリオでこのオプションを使用することができます。You might use this option for a cross-tenant scenario. マネージド ID でキー コンテナーにアクセスできる必要があります。Managed identity must have access to key vault.

マネージド ID または開発者 ID には、Key Vault からクライアント証明書を取得するためのアクセス許可が必要です。The managed identity or your developer identity must have permission to retrieve the client certificate from the Key Vault. 取得した証明書は、AppAuthentication ライブラリによってサービス プリンシパルのクライアント証明書として使用されます。The AppAuthentication library uses the retrieved certificate as the service principal's client credential.

サービス プリンシパル認証にクライアント証明書を使用するには:To use a client certificate for service principal authentication:

  1. サービス プリンシパル証明書を作成し、キー コンテナーに自動的に格納します。Create a service principal certificate and automatically store it in your Key Vault. Azure CLI の az ad sp create-for-rbac --keyvault <keyvaultname> --cert <certificatename> --create-cert --skip-assignment コマンドを使用します。Use the Azure CLI az ad sp create-for-rbac --keyvault <keyvaultname> --cert <certificatename> --create-cert --skip-assignment command:

    az ad sp create-for-rbac --keyvault <keyvaultname> --cert <certificatename> --create-cert --skip-assignment
    

    証明書の識別子は、https://<keyvaultname>.vault.azure.net/secrets/<certificatename> 形式の URL になります。The certificate identifier will be a URL in the format https://<keyvaultname>.vault.azure.net/secrets/<certificatename>

  2. 次の接続文字列内の {KeyVaultCertificateSecretIdentifier} を証明書の識別子に置き換えます。Replace {KeyVaultCertificateSecretIdentifier} in this connection string with the certificate identifier:

    RunAs=App;AppId={TestAppId};KeyVaultCertificateSecretIdentifier={KeyVaultCertificateSecretIdentifier}
    

    たとえば、キー コンテナーの名前が myKeyVault で、myCert という名前の証明書を作成した場合、証明書の識別子は次のようになります。For instance, if your key vault was called myKeyVault and you created a certificate called myCert, the certificate identifier would be:

    RunAs=App;AppId={TestAppId};KeyVaultCertificateSecretIdentifier=https://myKeyVault.vault.azure.net/secrets/myCert
    

接続文字列のサポートConnection String Support

既定では、AzureServiceTokenProvider は複数の方法を使用してトークンを取得します。By default, AzureServiceTokenProvider uses multiple methods to retrieve a token.

プロセスを制御するには、接続文字列を AzureServiceTokenProvider のコンストラクターに渡すか、AzureServicesAuthConnectionString 環境変数に指定して、使用します。To control the process, use a connection string passed to the AzureServiceTokenProvider constructor or specified in the AzureServicesAuthConnectionString environment variable.

次のオプションがサポートされています。The following options are supported:

接続文字列のオプションConnection string option シナリオScenario 説明Comments
RunAs=Developer; DeveloperTool=AzureCli ローカル開発Local development AzureServiceTokenProvider では、AzureCli を使用してトークンを取得します。AzureServiceTokenProvider uses AzureCli to get token.
RunAs=Developer; DeveloperTool=VisualStudio ローカル開発Local development AzureServiceTokenProvider では、Visual Studio を使用してトークンを取得します。AzureServiceTokenProvider uses Visual Studio to get token.
RunAs=CurrentUser ローカル開発Local development AzureServiceTokenProvider では、Azure AD 統合認証を使用してトークンを取得します。AzureServiceTokenProvider uses Azure AD Integrated Authentication to get token.
RunAs=App Azure リソースのマネージド IDManaged identities for Azure resources AzureServiceTokenProvider では、マネージド ID を使用してトークンを取得します。AzureServiceTokenProvider uses a managed identity to get token.
RunAs=App;AppId={ClientId of user-assigned identity} Azure リソースのユーザー割り当て IDUser-assigned identity for Azure resources AzureServiceTokenProvider では、ユーザー割り当て ID を使用してトークンを取得します。AzureServiceTokenProvider uses a user-assigned identity to get token.
RunAs=App;AppId={TestAppId};KeyVaultCertificateSecretIdentifier={KeyVaultCertificateSecretIdentifier} カスタム サービスの認証Custom services authentication KeyVaultCertificateSecretIdentifier は証明書のシークレット識別子です。KeyVaultCertificateSecretIdentifier is the certificate's secret identifier.
RunAs=App;AppId={AppId};TenantId={TenantId};CertificateThumbprint={Thumbprint};CertificateStoreLocation={LocalMachine or CurrentUser} サービス プリンシパルService principal AzureServiceTokenProvider は証明書を使用して Azure AD からトークンを取得します。AzureServiceTokenProvider uses certificate to get token from Azure AD.
RunAs=App;AppId={AppId};TenantId={TenantId};CertificateSubjectName={Subject};CertificateStoreLocation={LocalMachine or CurrentUser} サービス プリンシパルService principal AzureServiceTokenProvider は証明書を使用して Azure AD からトークンを取得しますAzureServiceTokenProvider uses certificate to get token from Azure AD
RunAs=App;AppId={AppId};TenantId={TenantId};AppKey={ClientSecret} サービス プリンシパルService principal AzureServiceTokenProvider はシークレットを使用して Azure AD からトークンを取得します。AzureServiceTokenProvider uses secret to get token from Azure AD.

サンプルSamples

Microsoft.Azure.Services.AppAuthentication ライブラリの動作を確認する場合は、次のコード サンプルを参照してください。To see the Microsoft.Azure.Services.AppAuthentication library in action, refer to the following code samples.

AppAuthentication のトラブルシューティングAppAuthentication Troubleshooting

ローカル開発時の一般的な問題Common issues during local development

Azure CLI がインストールされていないか、ログインしていないか、または最新バージョンがないAzure CLI is not installed, you're not logged in, or you don't have the latest version

az account get-access-token を実行して、Azure CLI にトークンが表示されるかどうかを確認します。Run az account get-access-token to see if Azure CLI shows a token for you. そのようなプログラムが見つからない場合は、最新バージョンの Azure CLI をインストールします。If it says no such program found, install the latest version of the Azure CLI. サインインを要求される場合があります。You may be prompted to sign in.

AzureServiceTokenProvider で Azure CLI のパスを見つけることができないAzureServiceTokenProvider can't find the path for Azure CLI

AzureServiceTokenProvider では、既定のインストール場所で Azure CLI が検索されます。AzureServiceTokenProvider looks for Azure CLI at its default install locations. Azure CLI が見つからない場合は、環境変数 AzureCLIPath を Azure CLI インストール フォルダーに設定します。If it can't find Azure CLI, set environment variable AzureCLIPath to the Azure CLI installation folder. AzureServiceTokenProvider によって、環境変数が Path 環境変数に追加されます。AzureServiceTokenProvider will add the environment variable to the Path environment variable.

複数のアカウントを使用して Azure CLI にログインしているか、同じアカウントに複数のテナント内のサブスクリプションへのアクセス権があるか、ローカル開発中に呼び出そうとしたときにアクセス拒否エラーが発生するYou're logged into Azure CLI using multiple accounts, the same account has access to subscriptions in multiple tenants, or you get an Access Denied error when trying to make calls during local development

Azure CLI を使って、使用するアカウントがあるものに既定のサブスクリプションを設定します。Using Azure CLI, set the default subscription to one that has the account you want to use. サブスクリプションは、アクセスするリソースと同じテナントに存在する必要があります: az account set --subscription [subscription-id]The subscription must be in the same tenant as the resource you want to access: az account set --subscription [subscription-id]. 出力が表示されない場合は、成功しています。If no output is seen, it succeeded. az account list を使用して、適切なアカウントが既定値になっていることを確認します。Verify the right account is now the default using az account list.

環境間の一般的な問題Common issues across environments

未承認のアクセス、アクセスの拒否、禁止、または同様のエラーUnauthorized access, access denied, forbidden, or similar error

使用されているプリンシパルに、アクセスしようとしているリソースへのアクセス権がありません。The principal used doesn't have access to the resource it's trying to access. ユーザー アカウントまたは App Service の MSI に、リソースへの "共同作成者" アクセス権を付与します。Grant either your user account or the App Service's MSI "Contributor" access to a resource. これは、サンプルをローカル コンピューターで実行しているか、Azure の App Service にデプロイしたかによって異なります。Which one depends on whether you're running the sample on your local computer or deployed in Azure to your App Service. キー コンテナーなどの一部のリソースには、ユーザー、アプリ、グループなどのプリンシパルへのアクセス権の付与に使用する独自のアクセス ポリシーもあります。Some resources, like key vaults, also have their own access policies that you use grant access to principals, such as users, apps, and groups.

Azure App Service にデプロイするときの一般的な問題Common issues when deployed to Azure App Service

App Service に対してマネージド ID が設定されていないManaged identity isn't set up on the App Service

Kudu デバッグ コンソールを使用して、環境変数 MSI_ENDPOINT および MSI_SECRET が存在することを確認します。Check the environment variables MSI_ENDPOINT and MSI_SECRET exist using Kudu debug console. これらの環境変数が存在しない場合は、App Service に対してマネージド ID が有効になりません。If these environment variables don't exist, Managed Identity isn't enabled on the App Service.

IIS を使用してローカルにデプロイするときの一般的な問題Common issues when deployed locally with IIS

IIS 内でアプリをデバッグするときにトークンを取得できないCan't retrieve tokens when debugging app in IIS

既定では、AppAuth は IIS の別のユーザー コンテキストで実行されます。By default, AppAuth runs in a different user context in IIS. そのため、開発者 ID を使用してアクセス トークンを取得するためのアクセス権はありません。That's why it doesn't have access to use your developer identity to retrieve access tokens. 次の 2 つの手順に従って、ユーザー コンテキストで実行するように IIS を構成できます。You can configure IIS to run with your user context with the following two steps:

  • 現在のユーザー アカウントとして実行するように Web アプリのアプリケーション プールを構成します。Configure the Application Pool for the web app to run as your current user account. 詳細については、こちらをご覧ください。See more information here

  • "SetProfileEnvironment" を "True" に構成します。Configure "setProfileEnvironment" to "True". 詳細については、こちらをご覧ください。See more information here.

    • %windir%\System32\inetsrv\config\applicationHost.config にアクセスしますGo to %windir%\System32\inetsrv\config\applicationHost.config
    • "setProfileEnvironment" を検索します。Search for "setProfileEnvironment". "False" に設定されている場合は、"True" に変更します。If it's set to "False", change it to "True". これが存在しない場合は、processModel 要素 (/configuration/system.applicationHost/applicationPools/applicationPoolDefaults/processModel/@setProfileEnvironment) に属性として追加し、それを "True" に設定します。If it's not present, add it as an attribute to the processModel element (/configuration/system.applicationHost/applicationPools/applicationPoolDefaults/processModel/@setProfileEnvironment), and set it to "True".
  • 詳細については、「Azure リソースの管理 ID について」を参照してください。Learn more about managed identities for Azure resources.

  • Azure AD の認証シナリオについて詳細を参照する。Learn more about Azure AD authentication scenarios.