使用客户端凭据(共享密钥或证书)进行服务到服务调用

警告

本内容适用于较旧版本的 Azure AD v1.0 终结点。 为新项目使用 Microsoft 标识平台

OAuth 2.0 客户端凭据授权流允许 Web 服务(机密客户端)在调用其他 Web 服务时使用它自己的凭据(而不是模拟用户)进行身份验证。 在这种情况下,客户端通常是中间层 Web 服务、后台程序服务或网站。 为了更高级别的保证,Azure AD 还允许调用服务以将证书(而不是共享密钥)用作凭据。

客户端凭据授权流关系图

下图说明了客户端凭据授权流在 Azure Active Directory (Azure AD) 中的工作原理。

OAuth2.0 客户端凭据授权流

  1. 客户端应用程序向 Azure AD 令牌颁发终结点进行身份验证,并请求访问令牌。
  2. Azure AD 令牌颁发终结点颁发访问令牌。
  3. 使用访问令牌向受保护资源进行身份验证。
  4. 受保护资源中的数据返回到客户端应用程序。

在 Azure AD 中注册服务

在 Azure Active Directory (Azure AD) 中注册调用服务和接收服务。 有关详细说明,请参阅 将应用程序与 Azure Active Directory 集成

请求访问令牌

若要请求访问令牌,对特定于租户的 Azure AD 终结点使用 HTTP POST。

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

服务到服务访问令牌请求

有两种情况,具体取决于客户端应用程序选择由共享密钥还是由证书保护。

第一种情况:使用共享机密访问令牌请求

使用共享密钥时,服务到服务访问令牌请求包含以下参数:

参数 类型 说明
grant_type 必填 指定请求的授权类型。 在客户端凭据授权流中,该值必须是 client_credentials。
client_id 必填 指定调用 Web 服务的 Azure AD 客户端 ID。 要查找调用应用程序的客户端 ID,请在 Azure 门户中,依次单击“Azure Active Directory”和“应用注册”,然后单击该应用程序 。 client_id 是应用程序 ID
client_secret 必填 在 Azure AD 中输入为调用 Web 服务或 daemon 应用程序注册的密钥。 要创建密钥,请在 Azure 门户中,依次单击“Azure Active Directory”>“应用注册”并单击该应用程序,然后依次单击“设置”>“密钥”,并添加密钥 。 提供此机密时请对其进行 URL 编码。
resource 必填 输入接收 Web 服务的应用 ID URI。 要查找应用 ID URI,请在 Azure 门户中,依次单击“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

第二种情况:使用证书访问令牌请求

使用证书的服务到服务访问令牌请求包含以下参数:

参数 类型 说明
grant_type 必填 指定请求的响应类型。 在客户端凭据授权流中,该值必须是 client_credentials。
client_id 必填 指定调用 Web 服务的 Azure AD 客户端 ID。 要查找调用应用程序的客户端 ID,请在 Azure 门户中,依次单击“Azure Active Directory”和“应用注册”,然后单击该应用程序 。 client_id 是应用程序 ID
client_assertion_type 必需 值必须是 urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion 必填 断言(JSON Web 令牌),需使用作为凭据向应用程序注册的证书进行创建和签名。 有关如何注册证书以及断言的格式,请阅读证书凭据的相关信息。
resource 必填 输入接收 Web 服务的应用 ID URI。 要查找应用 ID URI,请在 Azure 门户中,依次单击“Azure Active Directory”和“应用注册”,并单击服务应用程序,然后依次单击“设置”和“属性” 。

请注意,参数几乎与共享密钥请求的参数相同,只不过 client_secret 参数替换为两个参数: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 服务进行身份验证。
token_type 指示令牌类型值。 Azure AD 唯一支持的类型是 Bearer 。 有关持有者令牌的详细信息,请参阅 OAuth 2.0 授权框架:持有者令牌用法 (RFC 6750)
expires_in 访问令牌的有效期(以秒为单位)。
expires_on 访问令牌的过期时间。 该日期表示为自 1970-01-01T0:0:0Z UTC 至过期时间的秒数。 此值用于确定缓存令牌的生存期。
not_before 访问令牌可用的时间。 该日期表示为自 1970-01-01T0:0:0Z UTC 至令牌有效时间的秒数。
resource 接收 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

另请参阅