使用客户端凭据的服务到服务调用(共享机密或证书)

警告

本内容适用于较旧版本的 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集成。

请求访问令牌

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

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

服务间访问令牌请求

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

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

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

参数 类型 说明
grant_type(授权类型) 必填 指定请求的授权类型。 在客户端凭据授权流程中,该值必须是 client_credentials
客户端ID 必填 指定调用 Web 服务的 Azure AD 客户端 ID。 若要查找调用应用程序的客户端 ID,请在 Azure 门户中单击 Azure Active Directory,单击 应用注册,单击该应用程序。 client_id 是 应用 ID
客户端密钥 必填 在 Azure AD 中输入为调用 Web 服务或守护程序应用程序注册的密钥。 若要创建密钥,请在 Azure 门户中单击 Azure Active Directory,单击 应用注册,单击应用程序,单击 设置,单击 密钥,并添加密钥。 提供时请对该机密进行 URL 编码。
资源 必填 输入接收 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
客户端ID 必填 指定调用 Web 服务的 Azure AD 客户端 ID。 若要查找调用应用程序的客户端 ID,请在 Azure 门户中单击 Azure Active Directory,单击 应用注册,单击该应用程序。 客户端 ID 是 应用程序 ID
client_assertion_type 必填 该值必须是“urn:ietf:params:oauth:client-assertion-type:jwt-bearer
客户端断言 必填 需要使用您注册为应用程序凭据的证书来创建并签署的断言(JSON Web 令牌)。 有关如何注册证书以及断言的格式,请阅读证书凭据的相关信息。
资源 必填 输入接收 Web 服务的应用 ID URI。 若要查找应用 ID URI,请在 Azure 门户中单击 Azure Active Directory,单击 应用注册,单击服务应用程序,然后单击 设置属性

请注意,参数与共享机密的请求几乎相同,不同之处在于client_secret参数被两个参数所替代:client_assertion_type和client_assertion。

示例

以下 HTTP POST 请求带有证书的 https://service.contoso.com/ 网络服务的访问令牌。 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 授权框架:持有者令牌用法(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

另请参阅