警告
此內容適用於較舊的 Azure AD v1.0 端點。 針對新專案使用 Microsoft身分識別平臺。
OAuth 2.0 用戶端認證授與流程允許 Web 服務(機密用戶端)使用自己的認證,而不是模擬使用者,以在呼叫另一個 Web 服務時進行驗證。 在此案例中,用戶端通常是仲介層 Web 服務、精靈服務或網站。 為了獲得更高層級的保證,Azure AD 也允許呼叫服務使用憑證(而不是共用密碼)作為認證。
用戶端認證授與流程圖
下圖說明客戶端認證授與流程如何在 Azure Active Directory (Azure AD) 中運作。
- 用戶端應用程式會向 Azure AD 令牌發行端點進行驗證,並要求存取令牌。
- Azure AD 令牌發行端點會發出存取令牌。
- 存取令牌可用來向受保護的資源進行驗證。
- 來自受保護資源的數據會傳回用戶端應用程式。
在 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。 |
| client_id (客戶識別碼) | 必須的 | 指定呼叫 Web 服務的 Azure AD 用戶端識別碼。 若要尋找呼叫端應用程式的用戶端標識符,請在 Azure 入口網站中,按兩下 [Azure Active Directory],按兩下 [ 應用程式註冊],然後按兩下應用程式。 client_id是 應用程式識別碼 |
| 用戶端密鑰 | 必須的 | 在 Azure AD 中輸入為呼叫 Web 服務或精靈應用程式註冊的密鑰。 若要建立密鑰,請在 Azure 入口網站中,依序按兩下 [Azure Active Directory]、[ 應用程式註冊]、[ 設定]、[ 密鑰] 和 [金鑰]。 提供此秘密時進行 URL 編碼。 |
| 資源 | 必須的 | 輸入接收 Web 服務的應用程式識別碼 URI。 若要尋找應用程式標識碼 URI,請在 Azure 入口網站中,依序按兩下 [Azure Active Directory]、[ 應用程式註冊]、[服務應用程式],然後按兩下 [ 設定 ] 和 [ 內容]。 |
範例
下列 HTTP POST 會要求 Web 服務的存取令牌https://service.contoso.com/。
client_id 識別要求存取權杖的網路服務。
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 用戶端識別碼。 若要尋找呼叫端應用程式的用戶端標識符,請在 Azure 入口網站中,按兩下 [Azure Active Directory],按兩下 [ 應用程式註冊],然後按兩下應用程式。 client_id是 應用程式識別碼 |
| 客戶聲明類型 | 必須的 | 值必須是 urn:ietf:params:oauth:client-assertion-type:jwt-bearer |
| client_assertion(客戶斷言) | 必須的 | 判斷提示(JSON Web Token),您必須使用您註冊為應用程式的認證來建立和簽署。 請參閱憑證認證,以了解如何註冊您的憑證與聲明格式。 |
| 資源 | 必須的 | 輸入接收 Web 服務的應用程式識別碼 URI。 若要尋找應用程式標識碼 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 服務進行驗證。 |
| 令牌類型 | 表示令牌類型值。 Azure AD 支援的唯一類型是 Bearer。 如需持有人令牌的詳細資訊,請參閱 OAuth 2.0 授權架構:持有人令牌使用方式(RFC 6750)。 |
| 有效期限 | 存取權杖的有效時間 (以秒為單位)。 |
| 到期日 | 存取令牌到期的時間。 日期會以 1970-01-01T0:0:0Z UTC 到到期時間之前的秒數表示。 這個值用來判斷快取令牌的存留期。 |
| 提前不可 | 存取令牌開始可用的時間。 日期會以 1970-01-01T0:0:0Z UTC 到令牌有效時間之前的秒數表示。 |
| 資源 | 接收 Web 服務的應用程式識別碼 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