查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
在本主題中,我們將討論如何匯入外部產生的存取權杖、更新權杖。 或驗證碼傳送至 Edge 權杖儲存庫你可以使用這項技巧 設定 Apigee Edge 以驗證在 Apigee Edge 以外產生的權杖。
在一般情況下,Apigee Edge 會產生及儲存 OAuth 權杖,然後將權杖傳回給 呼叫應用程式接著,發出呼叫的應用程式會在提出要求時,將權杖傳回 Apigee Edge 和 Apigee Edge - 透過 OAuthV2 政策搭配 Operation = VerifyAccessToken, 驗證權杖是否有效。本主題說明如何設定 Apigee Edge 以儲存 從其他地方產生的 OAuth 權杖,但是權杖驗證部分保持不變。 就像由 Edge 產生的權杖一樣
範例
如果您想查看能說明技巧的實際範例 請使用本主題所述的 Apigee 「委派權杖管理」範例。
指南簡介
假設您目前已有一個授權系統,而且您想使用 而該系統產生的權杖或代碼值,取代 OAuth2 權杖或程式碼值 邊緣產生。接著您就可以使用替換的權杖或程式碼,提出安全的 API Proxy 要求。 而 Edge 會驗證這些容器是否由 Edge 產生。
一些背景資訊
在一般情況下,Apigee Edge 會產生隨機字串的隨機字串,藉此產生符記 數字。Apigee Edge 與該權杖、其他資料 (例如權杖核發時間) 建立關聯 到期的 API 產品清單,以及憑證的範圍。以上皆是 這項資訊可在由 OAuthV2 政策自動產生的回應中傳回 使用 Operation = GenerateAccessToken回應的形式如下所示:
{ "issued_at": "1469735625687", "application_name": "06947a86-919e-4ca3-ac72-036723b18231", "scope": "urn://example.com/read", "status": "approved", "api_product_list": "[implicit-test]", "api_product_list_json": ["implicit-test"], "expires_in": "1799", //--in seconds "developer.email": "joe@weathersample.com", "token_type": "BearerToken", "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk", "access_token": "zBC90HhCGmGlaMBWeZAai2s3za5j", "organization_name": "wwitman", "refresh_token_expires_in": "0", //--in seconds "refresh_count": "0" }
access_token 屬性的值實際上是查詢鍵
回應資料。應用程式可以向 Edge 中託管的 API Proxy 發出要求。
使用 OAuthV2 來攜帶不記名權杖 zBC90HhCGmGlaMBWeZAai2s3za5j
和 Edge
含有 Operation = VerifyAccessToken 的政策 - 查詢符記、擷取所有資訊,
並使用該資訊判斷所要求的 API Proxy 權杖是否有效。
這就是「權杖驗證」功能。上述所有資訊皆包含符記。
access_token 值只是用來查詢該資訊的方法。
另一方面,請按照此處所述的步驟,將 Edge 設定為儲存 權杖,因此其 access_token 值是由外部產生 課程中也會快速介紹 Memorystore 這是 Google Cloud 的全代管 Redis 服務所有其他中繼資料可能相同。例如 Apigee Edge 的外部,會產生「TOKEN-<16 random-<16 random》形式的權杖 數字>」,直接在 Google Cloud 控制台實際操作。在這種情況下,Apigee Edge 儲存的完整權杖中繼資料可能如下:
{ "issued_at": "1469735625687", "application_name": "06947a86-919e-4ca3-ac72-036723b18231", "scope": "urn://example.com/read", "status": "approved", "api_product_list": "[implicit-test]", "api_product_list_json": ["implicit-test"], "expires_in": "1799", //--in seconds "developer.email": "joe@weathersample.com", "token_type": "BearerToken", "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk", "access_token": "TOKEN-1092837373654221", "organization_name": "wwitman", "refresh_token_expires_in": "0", //--in seconds "refresh_count": "0" }
在這種情況下,應用程式可以向 Edge 中託管的 API Proxy 發出要求,
權杖 TOKEN-1092837373654221
和 Edge - 透過 OAuthV2 政策搭配「Operation =」
VerifyAccessToken - 將可以驗證憑證。您可以針對以下項目套用類似的匯入模式:
授權碼和重新整理權杖
讓我們一起瞭解如何驗證用戶端 憑證
產生權杖的一項先決條件是驗證提出要求的用戶端。根據預設, Apigee Edge 中的 OAuthV2/GenerateAccessToken 政策會以隱含形式驗證用戶端憑證。 通常在申請 OAuthV2 權杖的要求中,client_id 和 client_secret 會傳入 Authorization 標頭,透過 HTTP 基本授權進行編碼 (以冒號串連, Base64 編碼)。Apigee Edge 中的 OAuthV2/GenerateAccessToken 政策會將該標頭 查詢 client_id,並驗證傳入的 client_secret 是否適用於該用戶端 client_id.當 Apigee Edge 知道憑證存在時,這個方法有效,換句話說, 儲存在 Apigee Edge 中的開發人員應用程式,其中包含憑證,其本身含有 指定的 client_id 和 client_secret。
如果用戶端憑證未經過 Apigee Edge 驗證,您就必須 先設計您的 API Proxy,在產生權杖之前,透過一些 。通常是透過服務呼叫政策, 可連線至網路中的遠端端點
無論是默示或明確方式,您都必須確保 API Proxy 產生權杖時,首先會驗證用戶端憑證。請記得, 用戶端的執行程序與產生存取權杖無關。您可以將 Apigee Edge 設定為同時執行這兩項作業 或是兩者都不做
如果您希望 Apigee Edge 中的 OAuthV2/GenerateAccessToken 政策用於驗證用戶端
比對 Edge 商店,請將 <ExternalAuthorization>
元素設為
false
或完全省略。如要使用
外部授權服務,明確驗證用戶端憑證
<ExternalAuthorization>
到 true
。
雖然 Apigee Edge 可能不會驗證用戶端憑證,但對於 由 Apigee Edge 知道及管理的 client_id。Apigee Edge 中的每個 access_token 由 Apigee Edge 產生或由外部系統產生,再匯入 Apigee Edge 必須與用戶端應用程式相關聯,以 client_id 表示。即使這樣 其中 Apigee Edge 中的 OAuthV2/GenerateAccessToken 政策不會驗證 client_id 和 client_secret 比對時,這項政策會驗證 client_id 是否有效、存在,以及 已撤銷。因此,您必須先透過 Edge 匯入 client_id's,才能進行必要的設定步驟 管理 API
Apigee 第三方 OAuth 政策流程
在 Apigee Edge 中使用第三方 OAuth 系統的權杖,產生存取權的流程 符記應遵循下列任一模式。
(外部連結) 用戶端憑證驗證
- ServiceCallout 驗證傳入用戶端憑證,並取得外部權杖。
- ExtractVariables 是 JavaScript 步驟 從回應中擷取外部產生的權杖
- AssignMessage 授予
設定名為
oauth_external_authorization_status
的特殊已知變數。 這個值必須為 true,表示用戶端憑證有效。 - OAuthV2/GenerateAccessToken
已將
<ExternalAuthorization>
元素設為true
,且至少設為 1 共<ExternalAccessToken>
、<ExternalRefreshToken>
,或<ExternalAuthorizationCode>
。
內建電池用 用戶端憑證驗證
- ServiceCallout 取得外部權杖
- ExtractVariables 是 JavaScript 步驟 從回應中擷取外部產生的權杖
- OAuthV2/GenerateAccessToken
已將
<ExternalAuthorization>
元素設為false
,且至少設為 1 共<ExternalAccessToken>
、<ExternalRefreshToken>
,或<ExternalAuthorizationCode>
。
流程和政策設定注意事項
-
如果您要使用外部系統驗證用戶端憑證, 制定必要的政策流程一般情況下,您需要使用 服務呼叫政策:將外部辨識的憑證傳送至外部 驗證服務外部驗證服務通常會傳回回應 如果憑證有效,則也會包含存取權杖。
-
Service 呼叫 之後,API Proxy 需要剖析回應來擷取 有效性狀態,以及外部產生的 access_token, refresh_token.
-
在 OAuthV2/GenerateAccessToken 政策中設定
<StoreToken>
元素 設為true
,並將<ExternalAuthorization>
元素設為true
或false
。執行 OAuthV2/GenerateAccessToken 政策時,系統會讀取變數
oauth_external_authorization_status
。如果已設定該變數,且值為 是,Apigee Edge 不會嘗試驗證用戶端憑證。如果變數 如果未設定或值為 True,Apigee Edge 就會嘗試驗證用戶端 憑證 -
OAuthV2 政策有三個元素,可讓您指定 要匯入的資料:
<ExternalAccessToken>
,<ExternalRefreshToken>
, 和<ExternalAuthorizationCode>
。每個元素都接受 流程變數。Edge 政策會讀取該變數,以找出 外部產生的存取權杖、更新權杖或授權碼。一切由您決定 實施政策和邏輯,將外部符記或代碼放置在適當的 變數。舉例來說,下列 OAuthV2 政策中的設定會指示 Edge 尋找 符記。
external_token
<ExternalAccessToken>external_token</ExternalAccessToken>
您也需要在之前的步驟設定該變數。
-
在設定
oauth_external_authorization_status
變數的過程中,常見的 如要設定這個變數,就必須將 AssignMessage 政策用於 assignVariable 元素,如下所示:<AssignMessage name="AssignMessage-SetVariable"> <DisplayName>Assign Message - Set Variable</DisplayName> <AssignVariable> <Name>oauth_external_authorization_status</Name> <Value>true</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
請記住,這項政策必須在 OAuthV2 政策前面,且 Operation = GenerateAccessToken.
OAuthV2 政策示例
下列 OAuthV2 政策
產生 Apigee Edge 存取權杖時,Edge 會尋找
流程變數 external_access_token
中的符記值。
<OAuthV2 name="OAuth-v20-Store-External-Token"> <ExternalAccessToken>external_access_token</ExternalAccessToken> <ExternalAuthorization>true</ExternalAuthorization> <Operation>GenerateAccessToken</Operation> <GenerateResponse enabled="true"> <Format>FORM_PARAM</Format> </GenerateResponse> <ReuseRefreshToken>false</ReuseRefreshToken> <StoreToken>true</StoreToken> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <ExpiresIn ref='flow.variable'>2400000</ExpiresIn> </OAuthV2>
理論上,您可以透過任何第三方 OAuth2 授權套用這個模式 課程中也會快速介紹 Memorystore 這是 Google Cloud 的全代管 Redis 服務