實作用戶端憑證授權類型

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

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

關於這個主題

本主題將概略說明 OAuth 2.0 用戶端憑證授權類型與 並探討如何在 Apigee Edge 上實作此流程。

用途

通常,當應用程式也是資源擁有者時,就會使用這個授權類型。例如: 應用程式可能需要存取後端的雲端式儲存服務,才能儲存和擷取 用於執行工作,而非使用者擁有的資料。這個授權類型 用戶端應用程式與授權伺服器之間的流程十分明確。使用者未 參與這項補助類型流程

角色

角色會指定「執行者」參與 OAuth 流程的環節。接著快速說明一下 用戶端憑證角色,有助於說明 Apigee Edge 的使用位置。如需完整的 OAuth 2.0 角色討論,請參閱 IETF OAuth 2.0 規格

  • 用戶端應用程式 - 需要使用者受保護權限的應用程式 再複習一下,機構節點 是所有 Google Cloud Platform 資源的根節點一般來說,透過這個流程,應用程式會在伺服器上執行,而不是在使用者的本機上執行 筆電或裝置。
  • Apigee Edge:在這個流程中,Apigee Edge 是 OAuth 授權。 伺服器其角色為產生存取權杖、驗證存取權杖,以及通過授權 將受保護資源的要求傳送到資源伺服器
  • 資源伺服器 -- 儲存受保護資料的後端服務 供用戶端應用程式存取如要保護透過外部 IP 位址 Apigee Edge 後,Apigee Edge 也會是資源伺服器。

程式碼範例

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

流程圖

下圖說明 Apigee Edge 提供 驗證伺服器一般來說,Edge 在這個流程中也是資源伺服器 API Proxy 屬於受保護的資源。


用戶端憑證流程中的步驟

以下摘要說明實作用戶端憑證程式碼授權類型所需的步驟 其中 Apigee Edge 為授權伺服器請記住,在這個流程中 只會提供用戶端 ID 和用戶端密鑰。如果這些憑證有效,Apigee Edge 會傳回其 存取權杖

必備條件:用戶端應用程式必須向 Apigee Edge 註冊,才能獲得 用戶端 ID 和用戶端密鑰。參閱「註冊用戶端應用程式」 詳細資料。

1. 用戶端要求一個 存取權杖

為了接收存取權杖,用戶端會透過 POST 要求使用用戶端 ID 值,對 Edge 發出 API 呼叫 和用戶端密鑰。此外, allow_type=client_credentials 必須以查詢參數的形式傳遞。(不過,您可以設定 OAuthV2 政策,以便在要求標頭或內文中接受這個參數。詳情請參閱 OAuthV2 政策)。

例如:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials&client_id=ns4fQc14Zg4hKFCNaSzArVuwszX95X&client_secret=ZIjFyTsNgQNyxI'

注意:雖然您可以將 client_id 和 client_secret 值做為查詢傳送 方法是以 Base64 網址編碼字串的形式,在 Authorization 標頭。如要採用這種做法,請使用 base64 編碼工具或公用程式 這兩個值都會以半形冒號分隔。就像這樣: aBase64EncodeFunction(clientidvalue:clientsecret)。因此上述範例的編碼方式如下: :

result = aBase64EncodeFunction(ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI) // 請留意 並以冒號分隔兩個值。

上述字串的 base64 編碼結果如下: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

接著,請按照以下方式提出權杖要求:

$ 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 bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg=='

2. 邊緣會驗證 憑證

請注意,API 呼叫會傳送至 /accesstoken 端點。這個端點有政策 來驗證應用程式憑證。也就是說,政策會比較 和 Apigee Edge 在註冊應用程式時建立的金鑰。如果您想 如要進一步瞭解 Edge 上的 OAuth 端點,請參閱設定 OAuth 端點和政策

3. Edge 傳回回應

如果憑證正確無誤,Edge 會將存取權杖傳回用戶端。否則,錯誤訊息將顯示 。

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

現在,透過有效的存取權杖,用戶端就能呼叫受保護的 API。在本 情境、要求會傳送給 Apigee Edge (Proxy),而 Edge 負責驗證 存取權杖,再將 API 呼叫傳遞至目標資源伺服器。例如 請參閱下方「呼叫受保護的 API」一節。

設定流程和政策

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

自訂流程設定

如要展示 API Proxy 流程的設定方式,最簡單的方法是顯示 XML 流程 定義以下 API Proxy 流程範例旨在處理存取權杖要求。適用對象 例如,當要求傳入,且路徑後置字串與 /accesstoken 相符時,GetAccessToken 這麼做會觸發政策如需設定 OAuth,請參閱設定 OAuth 端點和政策,快速概略說明建立自訂流程所需的步驟 就像這樣

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

使用政策設定流程

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

取得存取權杖

這項政策已附加至 /accesstoken 路徑。使用 OAuthV2 政策。

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

用來取得存取權杖的 API 呼叫是 POST,其中包含的 Authorization 標頭 採用 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 作業。這項政策會檢查傳入要求是否具備有效的存取權杖。 如果權杖有效,Edge 會處理要求。如果無效,Edge 會傳回錯誤。適用對象 基本步驟,請參閱驗證 存取權杖

<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 政策。