實作用戶端憑證授權類型

本頁內容適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

使用用戶端憑證授權類型時,應用程式會將自己的憑證 (用戶端 ID 和用戶端密鑰) 傳送至 Apigee 上的端點,該端點會設定為產生存取權杖。如果憑證有效,Apigee 會將存取權杖傳回給用戶端應用程式。

關於這個主題

本主題將概略說明 OAuth 2.0 用戶端憑證授權類型,並討論如何在 Apigee 上實作這項流程。

用途

通常,如果應用程式也是資源擁有者,就會使用這類授權類型。舉例來說,應用程式可能需要存取後端雲端儲存服務,以儲存及擷取用於執行工作的資料,而非使用者擁有的資料。這類授權類型流程只會在用戶端應用程式和授權伺服器之間發生。使用者不會參與這類授權流程。

角色

角色會指定參與 OAuth 流程的「行為人」。我們快速瀏覽一下用戶端憑證角色,瞭解 Apigee 的適用範圍。如要完整瞭解 OAuth 2.0 角色,請參閱 IETF OAuth 2.0 規格

  • 用戶端應用程式:需要存取使用者受保護資源的應用程式。通常使用這個流程時,應用程式會在伺服器上執行,而不是在使用者筆電或裝置的本機執行。
  • Apigee:在這個流程中,Apigee 是 OAuth 授權伺服器。其角色是產生存取權杖、驗證存取權杖,以及將受保護資源的授權要求傳遞至資源伺服器。
  • 資源伺服器:後端服務,用於儲存受保護的資料,用戶端應用程式必須取得存取權才能存取這些資料。如果您要保護 Apigee 上代管的 API Proxy,Apigee 也是資源伺服器。

程式碼範例

您可以在 GitHub 找到 用戶端憑證授權類型完整的運作範例實作。如需更多範例的連結,請參閱下方的「其他資源」。

流程圖

下圖顯示用戶端憑證流程,其中 Apigee 是授權伺服器。一般而言,Apigee 也是這個流程中的資源伺服器,也就是 API Proxy 是受保護的資源。

用戶端憑證流程。

用戶端憑證流程的步驟

以下是導入用戶端憑證程式碼授權類型時所需步驟的摘要,其中 Apigee 會做為授權伺服器。請注意,使用這個流程時,用戶端應用程式只會提供用戶端 ID 和用戶端密鑰,如果有效,Apigee 就會傳回存取權杖。

先決條件:用戶端應用程式必須向 Apigee 註冊,才能取得用戶端 ID 和用戶端密鑰。詳情請參閱「 註冊用戶端應用程式」。

1. 用戶端要求存取權杖

如要取得存取權杖,用戶端會將 API 呼叫 POST 至 Apigee,並附上從已註冊的開發人員應用程式取得的用戶端 ID 和用戶端密鑰值 (在本範例中,這些值會 經過 Base64 編碼,並傳遞至 Authorization 標頭)。此外,參數 grant_type=client_credentials 必須以查詢參數的形式傳遞。(不過,您可以設定 OAuthV2 政策,在要求標頭或主體中接受這個參數,詳情請參閱 OAuthV2 政策)。

例如:

curl -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=client_credentials"

另請參閱「使用用戶端憑證授權類型」。

2. Apigee 會驗證憑證

請注意,API 呼叫會傳送至 /oauth/token 端點。這個端點已附加政策,可驗證應用程式的憑證。也就是說,政策會比較提交的金鑰與 Apigee 在應用程式註冊時建立的金鑰。如要進一步瞭解 Apigee 的 OAuth 端點,請參閱「設定 OAuth 端點和政策」。

3. Apigee 會傳回回應

如果憑證沒問題,Apigee 會將存取權杖傳回給用戶端。否則會傳回錯誤。

4. 用戶端呼叫受保護的 API

現在,有了有效的存取權杖,用戶端就能呼叫受保護的 API。在這個情境中,要求會傳送至 Apigee (Proxy),而 Apigee 負責驗證存取權杖,然後再將 API 呼叫傳送至目標資源伺服器。如需範例,請參閱下方的「呼叫受保護的 API」。

設定流程和政策

Apigee 會以授權伺服器的身分處理存取權杖要求。身為 API 開發人員,您需要建立具有自訂流程的 Proxy,以處理權杖要求,並新增及設定 OAuthV2 政策。本節說明如何設定該端點。

自訂流程設定

如要說明 API Proxy 流程的設定方式,最簡單的方法就是顯示 XML 流程定義。以下是設計用來處理存取權杖要求的 API Proxy 流程範例。舉例來說,當要求傳入且路徑尾碼與 /oauth/token 相符時,系統會觸發 GetAccessToken 政策。如要快速瞭解建立這類自訂流程的必要步驟,請參閱「設定 OAuth 端點和政策」。

<Flows>
  <Flow name="GetAccessToken">
         <!-- This policy flow is triggered when the URI path suffix
         matches /oauth/token. Publish this URL to app developers
         to use when obtaining an access token using an auth code
         -->
    <Condition>proxy.pathsuffix == "/oauth/token"</Condition>
    <Request>
        <Step><Name>GetAccessToken</Name></Step>
    </Request>
  </Flow>
</Flows>

使用政策設定流程

您需要將政策附加至端點,如下所示。如要快速瞭解將 OAuthV2 政策新增至 Proxy 端點的步驟,請參閱「設定 OAuth 端點和政策」。

取得存取權杖

這項政策會附加至 /oauth/token 路徑。這項政策會使用 OAuthV2,並指定 GenerateAccessToken 作業。

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse/>
</OAuthV2>

取得存取權杖的 API 呼叫是 POST,並包含授權標頭,其中含有 Base64 編碼 client_id + client_secret 和查詢參數 grant_type=client_credentials。也可以包含範圍和狀態的 選用參數。例如:

curl -i \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVgT1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ'

附加驗證存取權憑證政策

如要使用 OAuth 2.0 安全性保護 API,您需要新增 OAuthV2 政策,並使用 VerifyAccessToken 作業。這項政策會檢查傳入的要求是否含有有效的存取權杖。 如果權杖有效,Apigee 會處理要求。如果無效,Apigee 會傳回錯誤。如需基本步驟,請參閱「驗證存取權杖」。

<OAuthV2 async="false" continueOnError="false" enabled="true" name="VerifyAccessToken">
    <DisplayName>VerifyAccessToken</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>VerifyAccessToken</Operation>
    <SupportedGrantTypes/>
    <GenerateResponse enabled="true"/>
    <Tokens/>
</OAuthV2>

呼叫受保護的 API

如要呼叫受 OAuth 2.0 安全防護機制保護的 API,您必須提供有效的存取權杖。正確模式是在 Authorization 標頭中加入權杖,如下所示:請注意,存取權杖也稱為「不記名權杖」。

$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \
  http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282

另請參閱「傳送存取權杖」。

其他資源

  • Apigee 提供 API 開發人員線上訓練課程,包括 API 安全性課程,其中包含 OAuth。
  • OAuthV2 政策:提供許多範例,說明如何向授權伺服器提出要求,以及如何設定 OAuthV2 政策。