使用用戶端認證 (共用密碼或憑證) 的服務對服務呼叫

警告

本內容適用於較舊的 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 required 指定要求的授與類型。 在用戶端認證授與流程中,值必須是 client_credentials
client_id required 指定呼叫端 Web 服務的 Azure AD 用戶端識別碼。 若要尋找呼叫應用程式的用戶端識別碼,請在 Azure 入口網站中按一下 [Azure Active Directory],並按一下 [應用程式註冊],再按一下應用程式。 client_id 是應用程式 ID
client_secret required 輸入在 Azure AD 中針對呼叫端 Web 服務或精靈應用程式所註冊的金鑰。 若要建立金鑰,請在 Azure 入口網站中按一下 [Azure Active Directory],並按一下 [應用程式註冊],按一下應用程式,接著依序按一下 [設定] 和 [金鑰],並新增金鑰。 在提供此祕密時對其進行 URL 編碼。
resource required 輸入接收端 Web 服務的應用程式識別碼 URI。 若要尋找應用程式識別碼 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 required 指定要求的回應類型。 在用戶端認證授與流程中,值必須是 client_credentials
client_id required 指定呼叫端 Web 服務的 Azure AD 用戶端識別碼。 若要尋找呼叫應用程式的用戶端識別碼,請在 Azure 入口網站中按一下 [Azure Active Directory],並按一下 [應用程式註冊],再按一下應用程式。 client_id 是應用程式 ID
client_assertion_type required 值必須是 urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion required 您必須建立判斷提示 (JSON Web 權杖),並使用註冊的憑證來簽署,以作為應用程式的認證。 請參閱憑證認證,以了解如何註冊您的憑證與判斷提示的格式。
resource required 輸入接收端 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 服務進行驗證。
token_type 表示權杖類型值。 Azure AD 唯一支援的類型是 [持有人] 。 如需有關持有人權杖的詳細資訊,請參閱 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 服務的應用程式識別碼 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

另請參閱