警告
このコンテンツは、以前の Azure AD v1.0 エンドポイント用です。 新しいプロジェクトには Microsoft ID プラットフォームを使用します。
OAuth 2.0 クライアント資格情報付与フローでは、Web サービス (機密クライアント) は、別の Web サービスを呼び出すときにユーザーを偽装するのではなく、独自の資格情報を使用して認証を行うことができます。 このシナリオでは、通常、クライアントは中間層 Web サービス、デーモン サービス、または Web サイトです。 より高いレベルの保証のために、Azure AD では、呼び出し元サービスが資格情報として (共有シークレットではなく) 証明書を使用することもできます。
クライアント資格情報付与フロー図
次の図では、Azure Active Directory (Azure AD) でのクライアント資格情報の付与フローのしくみについて説明します。
- クライアント アプリケーションは、Azure AD トークン発行エンドポイントに対して認証を行い、アクセス トークンを要求します。
- Azure AD トークン発行エンドポイントは、アクセス トークンを発行します。
- アクセス トークンは、セキュリティで保護されたリソースに対する認証に使用されます。
- セキュリティで保護されたリソースのデータがクライアント アプリケーションに返されます。
Azure AD にサービスを登録する
呼び出し元サービスと受信サービスの両方を Azure Active Directory (Azure AD) に登録します。 詳細な手順については、「 アプリケーションと Azure Active Directory の統合」を参照してください。
アクセス トークンを要求する
アクセス トークンを要求するには、テナント固有の Azure AD エンドポイントへの HTTP POST を使用します。
https://login.microsoftonline.com/<tenant id>/oauth2/token
サービス間アクセス トークン要求
クライアント アプリケーションが共有シークレットによってセキュリティ保護されるか、証明書によって保護されるかに応じて、2 つのケースがあります。
最初のケース: 共有シークレットを使用してトークン要求にアクセスする
共有シークレットを使用する場合、サービス間のアクセス トークン要求には、次のパラメーターが含まれてます。
パラメーター | タイプ | 説明 |
---|---|---|
grant_type(グラントタイプ) | 必須 | 要求された許可の種類を指定します。 クライアント資格情報付与フローでは、値を client_credentialsする必要があります。 |
クライアントID | 必須 | 呼び出し元の Web サービスの Azure AD クライアント ID を指定します。 呼び出し元のアプリケーションのクライアント ID を見つけるには、 Azure portal で [ Azure Active Directory] をクリックし、[ アプリの登録] をクリックし、アプリケーションをクリックします。 client_idは アプリケーション ID です |
クライアントシークレット | 必須 | Azure AD で呼び出し元の Web サービスまたはデーモン アプリケーションに登録されているキーを入力します。 キーを作成するには、Azure portal で [ Azure Active Directory] をクリックし、[ アプリの登録] をクリックし、アプリケーションをクリックして、[ 設定] をクリックし、[ キー] をクリックして、キーを追加します。 このシークレットを指定するときに、このシークレットを URL エンコードします。 |
リソース | 必須 | 受信 Web サービスのアプリ ID URI を入力します。 アプリ ID URI を見つけるには、Azure portal で [Azure Active Directory] をクリックし、[アプリの登録] をクリックし、サービス アプリケーションをクリックして、[設定とプロパティ] をクリックします。 |
例
次の HTTP POST は、https://service.contoso.com/
Web サービスのアクセス トークンを要求します。
client_id
は、アクセス トークンを要求する Web サービスを識別します。
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 番目のケース: 証明書を使用したアクセス トークン要求
証明書を含むサービス間アクセス トークン要求には、次のパラメーターが含まれています。
パラメーター | タイプ | 説明 |
---|---|---|
grant_type(グラントタイプ) | 必須 | 要求された応答の種類を指定します。 クライアント資格情報付与フローでは、値を client_credentialsする必要があります。 |
クライアントID | 必須 | 呼び出し元の Web サービスの Azure AD クライアント ID を指定します。 呼び出し元のアプリケーションのクライアント ID を見つけるには、 Azure portal で [ Azure Active Directory] をクリックし、[ アプリの登録] をクリックし、アプリケーションをクリックします。 client_idは アプリケーション ID です |
client_assertion_type | 必須 | 値は次の値にする必要があります。 urn:ietf:params:oauth:client-assertion-type:jwt-bearer |
クライアントアサーション | 必須 | アプリケーションの資格情報として登録した証明書を使用して作成して署名する必要があるアサーション (JSON Web トークン)。 証明書の登録方法とアサーションの形式の詳細については、証明書資格情報に関する記事を参照してください。 |
リソース | 必須 | 受信 Web サービスのアプリ ID URI を入力します。 アプリ ID URI を見つけるには、Azure portal で [Azure Active Directory] をクリックし、[アプリの登録] をクリックし、サービス アプリケーションをクリックして、[設定とプロパティ] をクリックします。 |
パラメーターは、共有シークレットによる要求の場合とほぼ同じですが、client_secret パラメーターが 2 つのパラメーター (client_assertion_typeとclient_assertion) に置き換えられる点に注意してください。
例
次の HTTP POST は、証明書を使用して https://service.contoso.com/
Web サービスのアクセス トークンを要求します。
client_id
は、アクセス トークンを要求する Web サービスを識別します。
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
サービス間アクセスのトークン応答
成功応答には、次のパラメーターを含む JSON OAuth 2.0 応答が含まれています。
パラメーター | 説明 |
---|---|
access_token | 要求されたアクセス トークン。 呼び出し元の Web サービスは、このトークンを使用して、受信側の Web サービスに対する認証を行うことができます。 |
トークンタイプ | トークンの種類の値を示します。 Azure AD がサポートする唯一の種類は Bearer です。 ベアラー トークンの詳細については、「 OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750)」を参照してください。 |
有効期限 | アクセス トークンの有効期間 (秒単位)。 |
有効期限 | アクセス トークンの有効期限が切れる時刻。 日付は、1970-01-01T0:0:0Z UTC から有効期限までの秒数として表されます。 この値は、キャッシュされたトークンの有効期間を調べるために使用されます。 |
以前にはない | アクセス トークンが使用可能になる時刻。 日付は、1970-01-01T0:0:0Z UTC からトークンの有効期間までの秒数として表されます。 |
リソース | 受信 Web サービスのアプリ ID URI。 |
応答の例
次の例は、Web サービスへのアクセス トークンの要求に対する成功応答を示しています。
{
"access_token":"eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw",
"token_type":"Bearer",
"expires_in":"3599",
"expires_on":"1388452167",
"resource":"https://service.contoso.com/"
}
アクセス トークンを使用して、セキュリティ保護されたリソースにアクセスする
サービスは、取得したアクセス トークンを使用して、 Authorization
ヘッダーにトークンを設定することで、ダウンストリーム Web API に対して認証された要求を行うことができます。
例
GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw