OAuth

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

OAuth 現已成為 API 的領先授權通訊協定。版本 本主題中將詳細介紹的 OAuth 定義,請參閱 OAuth 2.0 規格

OAuth 是一種通訊協定,可讓應用程式使用者進行授權 應用程式,代表使用者採取行動。應用程式必須取得存取權, 「符記」API 供應商會驗證應用程式 使用者的憑證,確認已授權應用程式,然後核發存取權杖 加入 App Engine 應用程式當應用程式使用受保護的 API 時,Apigee Edge 會檢查存取權杖以確保 且尚未過期。身為 API 供應商,您必須公開端點 可讓應用程式取得存取權杖。

為協助您輕鬆開始使用 OAuth、Apigee Edge 可讓您透過 政策設定及強制執行 OAuth,不必事先取得 完全不必撰寫程式碼在本主題中,您將瞭解如何保護 API、如何取得存取權 權杖,以及如何使用這些存取權杖存取受保護的 API。

預設的 OAuth 設定 機構組織

為了方便起見,Apigee Edge 中的所有機構都已預先設定一組 OAuth 2.0 實作用戶端憑證授權類型的端點。用戶端 憑證授權類型定義了核發存取權杖的程序,以交換應用程式 憑證。這些應用程式憑證就是用戶端金鑰和密鑰組合 Apigee Edge 對機構中註冊的每個應用程式造成的問題。用戶端憑證 是指用戶端金鑰和密鑰組合本身。

如要進一步瞭解如何使用 Edge 開發人員服務將憑證核發給應用程式,請看 註冊應用程式及管理金鑰

因此,要「振奮」並不容易透過 API 金鑰控管 API 安全性配置 OAuth 用戶端憑證驗證。這兩種方式會使用相同的用戶端金鑰和密鑰 驗證用戶端應用程式。差別在於用戶端憑證 控管機制,因為您可以輕鬆在需要時撤銷存取權杖,不必手動撤銷 應用程式的消費端金鑰如要使用預設 OAuth 端點,您可以使用任何用戶端金鑰 為貴機構中的應用程式產生的密鑰 (用於從權杖擷取存取權杖) 端點(您甚至可以為已有用戶端金鑰的應用程式啟用用戶端憑證 secrets.)

關於用戶端憑證授權的完整規格,請參閱 OAuth 2.0 規格

運用政策保護 API

您必須先設定 API 來驗證 OAuth 存取權,才能使用存取權杖 符記如要這麼做,請設定 API Proxy 驗證存取權杖。這意味著,每當應用程式向 使用其中一個 API,應用程式必須提供有效的存取權杖以及 API 要求。 Apigee Edge 可處理產生、儲存與驗證存取權杖時的複雜性 。

您可以在建立 API 時,輕鬆將 OAuth 驗證新增至 API 新的 API Proxy建立新的 API Proxy 時,您可以新增功能。阿斯 如下所示,只要點選圓形按鈕,即可新增 OAuth 2.0 存取權杖驗證 按一下「Secure with OAuth v2.0 Access Tokens」(使用 OAuth v2.0 存取權杖確保安全性) 即可。如果選取這個選項 系統會將政策附加至新建立的 API Proxy,一項用於驗證存取權杖 ,在存取權杖通過驗證後加以移除。

此外,當您選取 [Secure with OAuth v2.0 Access Tokens] (使用 OAuth v2.0 存取權杖確保安全) 選項時, [Publish API Product] (發布 API 產品) 核取方塊可供選取並自動 已選取。如果要在建立新的 API 時自動產生產品,請勾選這個選項 Proxy 上。系統會自動建立與新 API Proxy 相關聯的產品。如果發生以下情況: 如果您要將某個產品與這個新的 API 建立關聯,請務必清除此項目 就不會建立不必要的產品。如需產品相關資訊,請參閱 什麼是 API 產品?

您需要啟用 API Proxy 的存取權杖驗證 現有的 API 用戶端,您只要將 OAuthV2 類型的政策附加至要使用的 API 即可 您要保護的資訊類型OAuthV2 政策會透過指定「作業」的方式運作。如果您希望 驗證存取權杖,請指定名為 VerifyAccessToken 的作業。(其他 OAuthV2 政策類型支援的格式為 GenerateAccessToken 和 GenerateRefreshToken並瞭解這些作業 OAuth 端點)。

VerifyOAuthTokens 政策 OAuthV2 類型

驗證存取權杖的政策範例如下所示。(下列設定 部分。)

<OAuthV2 name="VerifyOAuthTokens"> 
  <Operation>VerifyAccessToken</Operation> 
</OAuthV2>

政策設定

名稱 說明 預設 必填與否
OAuthV2 政策類型
name API Proxy 端點所參照的政策名稱 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定 不適用
Operation OAuthV2 政策要執行的作業。透過指定 VerifyAccessToken 您可以設定政策來檢查存取權杖的要求,並且驗證 權杖有效、未過期,且獲準使用要求的 API 資源 (URI)。(為進行這項檢查,政策會讀取應用程式獲準使用的 API 產品) consume.) 不適用

如要在管理 UI 建立這項政策,請前往 API >API (應用程式介面) Proxy

從 API Proxy 清單中選取「weatherapi」

從 Weatherapi 的「Overview」(總覽) 頁面選取「Develop」(開發) 檢視畫面。

從下拉式選單中選取「New Policy」(新政策) >OAuth 2.0 版

選取 OAuth 2.0 政策後,「新增政策」設定選單 會顯示。

為政策設定描述性的名稱,請務必選取「附加政策」。 將「Flow PreFlow」和「Request」設為政策附件設定。

選取「Add」,建立政策並附加至 Weatherapi 的要求 PreFlow。

新增政策後,下方的要求 PreFlow 設定會顯示在 「Designer」窗格。

如果您是透過文字編輯器或 IDE 在本機環境中使用,可以在 針對要保護的 API Proxy 要求 PreFlow 政策:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthTokens</Name></Step>
  </Request>
</PreFlow>

將政策附加至要求 PreFlow,即可確保系統一律會強制執行政策 接收所有要求訊息。

您已使用 OAuth 2.0 用戶端憑證保護 API。下一步是瞭解 來取得存取權杖,並用來存取安全的 API。

使用存取權杖存取受保護的 資源

現在 Weatherapi 採用 OAuth 2.0 來保護安全,因此應用程式必須提供存取權杖才能使用 並嚴謹測試及提升 API 的公平性後 我們才能放心地推出 API如要存取受保護的資源,應用程式會在請求中以 「授權」HTTP 標頭,如下所示:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

由於 API 已附加 OAuthV2 政策,Apigee Edge 會驗證存取權杖 保持有效,然後授予該 API 的存取權,將天氣報告傳回至應用程式 發出要求

不過,應用程式如何取得存取權杖?我們將在下一節中說明。

如何為 存取權杖

應用程式會向權杖提供用戶端金鑰/密鑰組,以取得存取權杖 端點。憑證端點是在名為「API Proxy」的 API Proxy 中設定 oauth。因此,應用程式必須呼叫 OAuth API 所公開的 API 以取得存取權杖應用程式取得存取權杖後,即可呼叫 Weatherapi 重複執行,直到存取權杖過期或存取權杖被撤銷為止。

因此,您應該改變整套設計,將自己視為應用程式開發人員。您想呼叫 barapi,因此您需要取得應用程式的存取權杖。第一個步驟是 取得用戶端金鑰和密鑰 (又稱為 API 鍵應用程式金鑰)。

您可以使用 Apigee 為貴機構註冊應用程式,藉此取得用戶端金鑰和密鑰 邊緣

您可以在 Apigee Edge 管理 UI 中查看機構中的所有應用程式。

系統會顯示貴機構已註冊的應用程式清單。

(如果未顯示應用程式,您可以在「註冊應用程式及管理 API」主題中瞭解如何註冊應用程式 鍵)。

從清單中選取應用程式,即可查看詳細資料。

在所選應用程式的詳細資料檢視畫面中,記下「Consumer Key」的欄位 和 Consumer Secret (用戶端密鑰)。這兩個值是用戶端 憑證,供您取得 OAuth 存取權杖。

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apps \
-u myname:mypass 

這個呼叫會根據應用程式 ID 傳回應用程式清單。

[ "da496fae-2a04-4a5c-b2d0-709278a6f9db", "50e3e831-175b-4a05-8fb6-05a54701af6e" ]

您可以擷取應用程式的設定檔,方法是對應用程式 ID 發出簡單的 GET 呼叫:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apps/{app_id} \
-u myname:mypass 

例如:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apps/da496fae-2a04-4a5c-b2d0-709278a6f9db \
-u myname:mypass 

API 呼叫會傳回您指定應用程式的設定檔。舉例來說,假設應用程式設定檔 weatherapp 具有下列 JSON 表示法:

{
  "accessType" : "read",
  "apiProducts" : [ ],
  "appFamily" : "default",
  "appId" : "da496fae-2a04-4a5c-b2d0-709278a6f9db",
  "attributes" : [ ],
  "callbackUrl" : "http://weatherapp.com",
  "createdAt" : 1380290158713,
  "createdBy" : "noreply_admin@apigee.com",
  "credentials" : [ {
    "apiProducts" : [ {
      "apiproduct" : "PremiumWeatherAPI",
      "status" : "approved"
    } ],
    "attributes" : [ ],
    "consumerKey" : "bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K",
    "consumerSecret" : "hAr4Gn0gA9vAyvI4",
    "expiresAt" : -1,
    "issuedAt" : 1380290161417,
    "scopes" : [ ],
    "status" : "approved"
  } ],
  "developerId" : "5w95xGkpnjzJDBT4",
  "lastModifiedAt" : 1380290158713,
  "lastModifiedBy" : "noreply_admin@apigee.com",
  "name" : "weatherapp",
  "scopes" : [ ],
  "status" : "approved"
}

記下 consumerKeyconsumerSecret 的值。您可以使用 以取得存取權杖,在 HTTP 要求,如下所示授權類型會以查詢參數的形式顯示在要求中。 (請務必根據貴機構的名稱,變更變數 {org_name} 的值 )。

建立要求以取得存取權杖

在下列要求中,將 consumerKey 的值替換成 client_id。您將相關 consumerSecret 的值換成: client_secret

$ curl https://{org_name}-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K&client_secret=hAr4Gn0gA9vAyvI4'

API 服務會驗證用戶端金鑰與密鑰,然後產生含有 這個應用程式的存取權杖:

{
  "issued_at" : "1380892555397",
  "application_name" : "957aa73f-25c2-4ead-8021-adc01f0d2c6b",
  "scope" : "",
  "status" : "approved",
  "api_product_list" : "[oauth-test]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "client_id" : "bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K",
  "access_token" : "ylSkZIjbdWybfs4fUQe9BqP0LH5Z",
  "organization_name" : "rqa",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

請記下上方回應中的 access_token 值。這是存取權杖時 應用程式將用於取得受保護資源的執行階段存取權。這個應用程式的存取權杖為 ylSkZIjbdWybfs4fUQe9BqP0LH5Z

現在您已經擁有有效的存取權杖 (ylSkZIjbdWybfs4fUQe9BqP0LH5Z),可以使用 存取受保護的 API。

使用預設 OAuth 設定

Apigee Edge 中的每個機構 (即使是免費試用機構) 都會以 OAuth 權杖佈建。 端點端點已預先設定名為 API Proxy 的政策 oauth。建立帳戶之後,您就能開始使用權杖端點 Apigee Edge

預設的 OAuth 端點會公開下列端點 URI:

/oauth/client_credential/accesstoken

請將這個 URI 提供給需要取得存取權杖的開發人員。應用程式開發人員設定 應用程式呼叫這個端點,提供用戶端金鑰和密鑰組來取得存取權 符記

預設用戶端憑證權杖端點是透過下列位置透過網路公開: 網址:

https://{org_name}-{env_name}.apigee.net/oauth/client_credential/accesstoken

舉例來說,如果貴機構的名稱是「apimakers」,網址就會是:

https://apimakers-test.apigee.net/oauth/client_credential/accesstoken

這是開發人員呼叫的網址,以取得存取權杖。

三足式 OAuth 設定

三足式 OAuth 設定 (授權碼、隱含和密碼授權 type) 需要您 (API 供應商) 才能驗證應用程式使用者。自 機構會以不同方式驗證使用者,因此需要自訂部分政策或程式碼 ,將 OAuth 整合至使用者存放區。舉例來說,所有使用者都可能會儲存在「使用中」 目錄、LDAP 或其他使用者存放區中的目錄。如要讓三足式 OAuth 正常運行 則需要將這個使用者存放區的檢查整合至整個 OAuth 流程。

OAuth 1.0a

如要進一步瞭解 OAuth 1.0a 政策,請參閱 OAuth v1.0a 政策

取得說明

如需相關說明,請參閱 Apigee 頁面 客戶服務