クライアント資格情報を使用したサービス間の呼び出し (共有シークレットまたは証明書)Service to service calls using client credentials (shared secret or certificate)

警告

このコンテンツは、以前の Azure AD v1.0 エンドポイント用です。This content is for the older Azure AD v1.0 endpoint. 新しいプロジェクトには Microsoft ID プラットフォームを使用します。Use the Microsoft identity platform for new projects.

OAuth 2.0 クライアント資格情報付与フローでは、Web サービス ("Confidential クライアント") が別の Web サービスを呼び出すときに、ユーザーを偽装する代わりに、独自の資格情報を使用して認証することができます。The OAuth 2.0 Client Credentials Grant Flow permits a web service (confidential client) to use its own credentials instead of impersonating a user, to authenticate when calling another web service. このシナリオでは、クライアントは通常、中間層の Web サービス、デーモン サービス、または Web サイトです。In this scenario, the client is typically a middle-tier web service, a daemon service, or web site. 高いレベルの保証では、Azure AD により、呼び出し元サービスが、資格情報として (共有シークレットではなく) 証明書を使用することもできます。For a higher level of assurance, Azure AD also allows the calling service to use a certificate (instead of a shared secret) as a credential.

クライアント資格情報付与フローの図Client credentials grant flow diagram

次の図に、Azure Active Directory (Azure AD) でのクライアント資格情報付与フローのしくみを示します。The following diagram explains how the client credentials grant flow works in Azure Active Directory (Azure AD).

OAuth2.0 Client Credentials Grant Flow

  1. クライアント アプリケーションが Azure AD トークン発行エンドポイントに対して認証処理を行い、アクセス トークンを要求します。The client application authenticates to the Azure AD token issuance endpoint and requests an access token.
  2. Azure AD トークン発行エンドポイントがアクセス トークンを発行します。The Azure AD token issuance endpoint issues the access token.
  3. アクセス トークンを使用して、セキュリティで保護されたリソースに対する認証処理が行われます。The access token is used to authenticate to the secured resource.
  4. セキュリティで保護されたリソースからクライアント アプリケーションにデータが返されます。Data from the secured resource is returned to the client application.

Azure AD にサービスを登録するRegister the Services in Azure AD

Azure Active Directory (Azure AD) に呼び出し元のサービスと受信側のサービスの両方を登録します。Register both the calling service and the receiving service in Azure Active Directory (Azure AD). 詳しい説明については、「Azure Active Directory とアプリケーションの統合」を参照してください。For detailed instructions, see Integrating applications with Azure Active Directory.

アクセス トークンを要求するRequest an Access Token

アクセス トークンを要求するには、テナントに固有の Azure AD エンドポイントへの HTTP POST を使用します。To request an access token, use an HTTP POST to the tenant-specific Azure AD endpoint.

https://login.microsoftonline.com/<tenant id>/oauth2/token

サービス間のアクセス トークン要求Service-to-service access token request

クライアント アプリケーションのセキュリティ保護に共有シークレットまたは証明書のどちらを使うかに応じて、2 つのケースがあります。There are two cases depending on whether the client application chooses to be secured by a shared secret, or a certificate.

最初のケース:共有シークレットを使ったアクセス トークン要求First case: Access token request with a shared secret

共有シークレットを使用する場合、サービス間のアクセス トークン要求には、次のパラメーターが含まれてます。When using a shared secret, a service-to-service access token request contains the following parameters:

パラメーターParameter TypeType 説明Description
grant_typegrant_type requiredrequired 要求されている付与の種類を指定します。Specifies the requested grant type. クライアント資格情報付与フローでは、値は client_credentials である必要があります。In a Client Credentials Grant flow, the value must be client_credentials.
client_idclient_id requiredrequired 呼び出し元の Web サービスの Azure AD クライアント ID を指定します。Specifies the Azure AD client id of the calling web service. 呼び出し元アプリケーションのクライアント ID を調べるには、Azure Portal[Azure Active Directory] をクリックし、 [アプリの登録] をクリックしてからアプリケーションをクリックします。To find the calling application's client ID, in the Azure portal, click Azure Active Directory, click App registrations, click the application. client_id は "アプリケーション ID" ですThe client_id is the Application ID
client_secretclient_secret requiredrequired 呼び出し元の Web サービスまたは デーモン アプリケーションに対して Azure AD に登録されているキーを入力します。Enter a key registered for the calling web service or daemon application in Azure AD. キーを作成するには、Azure Portal で [Azure Active Directory] をクリックし、 [アプリの登録] をクリックしてからアプリケーションをクリックします。次に、 [設定][キー] の順にクリックして、キーを追加します。To create a key, in the Azure portal, click Azure Active Directory, click App registrations, click the application, click Settings, click Keys, and add a Key. このシークレットは、それを提供するときに URL エンコードします。URL-encode this secret when providing it.
resourceresource requiredrequired 受信側の Web サービスのアプリケーション ID URI を入力します。Enter the App ID URI of the receiving web service. アプリケーション ID URI を調べるには、Azure Portal で [Azure Active Directory][アプリの登録] の順にクリックして、サービス アプリケーションをクリックします。次に、 [設定][プロパティ] の順にクリックしますTo find the App ID URI, in the Azure portal, click Azure Active Directory, click App registrations, click the service application, and then click Settings and Properties.

Example

次の HTTP POST では、https://service.contoso.com/ Web サービス用のアクセス トークンを要求します。The following HTTP POST requests an access token for the https://service.contoso.com/ web service. client_id は、アクセス トークンを要求する Web サービスを識別します。The client_id identifies the web service that requests the access token.

POST /contoso.com/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F

2 番目のケース:証明書を使ったアクセス トークン要求Second case: Access token request with a certificate

証明書を含むサービス間のアクセス トークン要求には、次のパラメーターが含まれています。A service-to-service access token request with a certificate contains the following parameters:

パラメーターParameter TypeType 説明Description
grant_typegrant_type requiredrequired 要求された応答のタイプを指定します。Specifies the requested response type. クライアント資格情報付与フローでは、値は client_credentials である必要があります。In a Client Credentials Grant flow, the value must be client_credentials.
client_idclient_id requiredrequired 呼び出し元の Web サービスの Azure AD クライアント ID を指定します。Specifies the Azure AD client id of the calling web service. 呼び出し元アプリケーションのクライアント ID を調べるには、Azure Portal[Azure Active Directory] をクリックし、 [アプリの登録] をクリックしてからアプリケーションをクリックします。To find the calling application's client ID, in the Azure portal, click Azure Active Directory, click App registrations, click the application. client_id は "アプリケーション ID" ですThe client_id is the Application ID
client_assertion_typeclient_assertion_type requiredrequired 値は urn:ietf:params:oauth:client-assertion-type:jwt-bearer である必要がありますThe value must be urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertionclient_assertion requiredrequired 作成する必要があるアサーション (JSON Web トークン) です。このアサーションは、アプリケーションの資格情報として登録した証明書で署名する必要があります。An assertion (a JSON Web Token) that you need to create and sign with the certificate you registered as credentials for your application. 証明書の登録方法とアサーションの形式の詳細については、証明書資格情報に関する記事を参照してください。Read about certificate credentials to learn how to register your certificate and the format of the assertion.
resourceresource requiredrequired 受信側の Web サービスのアプリケーション ID URI を入力します。Enter the App ID URI of the receiving web service. アプリケーション ID URI を調べるには、Azure Portal で [Azure Active Directory][アプリの登録] の順にクリックして、サービス アプリケーションをクリックします。次に、 [設定][プロパティ] の順にクリックしますTo find the App ID URI, in the Azure portal, click Azure Active Directory, click App registrations, click the service application, and then click Settings and Properties.

パラメーターは、共有シークレットによる要求のパラメーターとほぼ同じであることに注意してください。唯一異なるのは、client_secret パラメーターが、client_assertion_type と client_assertion の 2 つのパラメーターに置き換えられている点です。Notice that the parameters are almost the same as in the case of the request by shared secret except that the client_secret parameter is replaced by two parameters: a client_assertion_type and client_assertion.

Example

次の HTTP POST は、証明書を使用して https://service.contoso.com/ Web サービスのアクセス トークンを要求します。The following HTTP POST requests an access token for the https://service.contoso.com/ web service with a certificate. client_id は、アクセス トークンを要求する Web サービスを識別します。The client_id identifies the web service that requests the access token.

POST /<tenant_id>/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

resource=https%3A%2F%contoso.onmicrosoft.com%2Ffc7664b4-cdd6-43e1-9365-c2e1c4e1b3bf&client_id=97e0a5b7-d745-40b6-94fe-5f77d35c6e05&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg&grant_type=client_credentials

サービス間のアクセス トークン応答Service-to-Service Access Token Response

成功応答には、JSON OAuth 2.0 応答と共に次のパラメーターが含まれています。A success response contains a JSON OAuth 2.0 response with the following parameters:

パラメーターParameter 説明Description
access_tokenaccess_token 要求されたアクセス トークン。The requested access token. 呼び出し元の Web サービスは、このトークンを使用して受信側の Web サービスに対する認証処理を行うことができます。The calling web service can use this token to authenticate to the receiving web service.
token_typetoken_type トークン タイプ値を指定します。Indicates the token type value. Azure AD でサポートされるのは Bearerタイプのみです。The only type that Azure AD supports is Bearer. ベアラー トークンの詳細については、「OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750)」(OAuth 2.0 承認フレームワーク: ベアラー トークンの使用法 (RFC 6750)) をご覧ください。For more information about bearer tokens, see The OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
expires_inexpires_in アクセス トークンの有効期間 (秒)。How long the access token is valid (in seconds).
expires_onexpires_on アクセス トークンの有効期限が切れる日時。The time when the access token expires. 日時は 1970-01-01T0:0:0Z UTC から期限切れ日時までの秒数として表されます。The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. この値は、キャッシュされたトークンの有効期間を調べるために使用されます。This value is used to determine the lifetime of cached tokens.
not_beforenot_before アクセス トークンが使用可能になる日時。The time from which the access token becomes usable. 日時は 1970-01-01T0:0:0Z UTC から、トークンの有効期間が切れるまでの秒数として表されます。The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until time of validity for the token.
resourceresource 受信側の Web サービスのアプリケーション ID URI。The App ID URI of the receiving web service.

応答の例Example of response

次の例に、Web サービスへのアクセス トークン要求に対する成功応答を示します。The following example shows a success response to a request for an access token to a web service.

{
"access_token":"eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw",
"token_type":"Bearer",
"expires_in":"3599",
"expires_on":"1388452167",
"resource":"https://service.contoso.com/"
}

アクセス トークンを使用して、セキュリティ保護されたリソースにアクセスするUse the access token to access the secured resource

サービスは上で取得されたアクセス トークンを使用し、そのトークンを Authorization ヘッダー内に設定して、ダウンストリーム Web API に認証済み要求を発行できます。The service can use the acquired access token to make authenticated requests to the downstream web API by setting the token in the Authorization header.

Example

GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw

関連項目See also