您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
本主題將說明如何要求存取權杖和授權碼、設定 OAuth 2.0 端點,以及為每個支援的授權類型設定政策。
程式碼範例
為方便起見,本主題討論的政策和端點已在 GitHub 的 Apigee api-platform-samples 存放區中,以 oauth-doc-examples 專案的形式提供。您可以部署程式碼範例,並試用本主題中顯示的範例要求。詳情請參閱專案 README。
要求存取權杖: 授權碼授權類型
本節說明如何使用授權碼授權類型流程要求存取權杖。如要瞭解 OAuth 2.0 授權類型,請參閱「OAuth 2.0 簡介」。
要求範例
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'
必要參數
根據預設,這些參數必須為 x-www-form-urlencoded,且在要求主體中指定 (如上例所示);不過,您可以設定附加至這個 /accesstoken 端點的 OAuthV2 政策中的 <GrantType>、<Code> 和 <RedirectUri> 元素,變更這項預設設定。詳情請參閱「OAuthV2 政策」。
- grant_type - 必須設為
authorization_code值。 - code - 從
/authorize端點 (或您選擇的任何名稱) 收到的授權碼。如要在授權碼授予類型流程中要求存取權杖,您必須先取得授權碼。請參閱下方的「要求授權碼」。另請參閱實作授權碼授予類型。 - redirect_uri - 如果先前的授權碼要求中包含
redirect_uri參數,您就必須提供這項參數。如果授權碼要求中未包含redirect_uri參數,且您未提供這個參數,則這項政策會使用註冊開發人員應用程式時提供的「回呼網址」值。
選用參數
- 狀態 - 系統會將這個字串連同回應一併傳回。通常用於防範跨網站偽造要求攻擊。
- 範圍 - 可讓您篩選可使用所產生權杖的 API 產品清單。如要進一步瞭解範圍,請參閱「使用 OAuth2 範圍」。
驗證
您必須以基本驗證標頭 (Base64 編碼) 或表單參數 client_id 和 client_secret 傳遞用戶端 ID 和用戶端密鑰。您可以從已註冊的開發人員應用程式取得這些值。另請參閱「編碼基本驗證憑證」。
範例端點
以下是產生存取權杖的端點設定範例。這項政策會執行 GenerateAccessToken 政策,後者必須設定為支援 authorization_code 授權類型。
...
<Flow name="generate-access-token">
<Description>Generate a token</Description>
<Request>
<Step>
<Name>GenerateAccessToken</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
</Flow>
...範例政策
這是基本的 GenerateAccessToken 政策,設定為接受 authorization_code 授權類型。如要瞭解可透過這項政策設定的選用設定元素,請參閱「OAuthV2 政策」。
<OAuthV2 name="GenerateAccessToken">
<Operation>GenerateAccessToken</Operation>
<ExpiresIn>1800000</ExpiresIn>
<RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn>
<SupportedGrantTypes>
<GrantType>authorization_code</GrantType>
</SupportedGrantTypes>
<GenerateResponse enabled="true"/>
</OAuthV2>退貨
啟用 <GenerateResponse> 後,政策會傳回包含存取權杖的 JSON 回應,如下所示。authorization_code 授權類型會建立存取權杖和更新權杖,因此回應可能如下所示:
{ "issued_at": "1420262924658", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420262924658", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi", "organization_name": "docs", "refresh_token_expires_in": "86399", //--in seconds "refresh_count": "0" }
如果將 <GenerateResponse> 設為 False,政策不會傳回回應。而是會填入下列一組流程變數,其中包含存取權杖授權的相關資料。
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status例如:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
要求存取權杖:用戶端憑證授權類型
本節說明如何使用用戶端憑證授權類型流程要求存取權杖。如要瞭解 OAuth 2.0 授權類型,請參閱「OAuth 2.0 簡介」。
要求範例
如要瞭解如何編碼下列呼叫中的基本驗證標頭,請參閱「編碼基本驗證憑證」。
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHoAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
必要參數
根據預設,必要 grant_type 參數必須為 x-www-form-urlencoded,且在要求主體中指定 (如上例所示);不過,您可以在附加至這個 /accesstoken 端點的 OAuthV2 政策中設定 <GrantType> 元素,變更這項預設值。舉例來說,您可能會選擇在查詢參數中傳遞
參數。詳情請參閱「OAuthV2 政策」。
- grant_type - 必須設為
client_credentials值。
選用參數
- 狀態 - 系統會將這個字串連同回應一併傳回。通常用於防範跨網站偽造要求攻擊。
- 範圍 - 可讓您篩選可使用所產生權杖的 API 產品清單。如要進一步瞭解範圍,請參閱「使用 OAuth2 範圍」。
驗證
您必須以基本驗證標頭 (Base64 編碼) 或表單參數 client_id 和 client_secret 傳遞用戶端 ID 和用戶端密鑰。您可以從與要求相關聯的已註冊開發人員應用程式取得這些值。另請參閱「編碼基本驗證憑證」。
範例端點
以下是產生存取權杖的端點設定範例。這項政策會執行 GenerateAccessToken 政策,該政策必須設定為支援 client_credentials 授權類型。
...
<Flow name="generate-access-token">
<Request>
<Step>
<Name>GenerateAccessToken</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
</Flow>
...範例政策
這是基本的 GenerateAccessToken 政策,設定為接受 client_credentials 授權類型。如要瞭解可透過這項政策設定的選用設定元素,請參閱「OAuthV2 政策」。
<OAuthV2 name="GenerateAccessToken">
<Operation>GenerateAccessToken</Operation>
<ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
<SupportedGrantTypes>
<GrantType>client_credentials</GrantType>
</SupportedGrantTypes>
<GenerateResponse enabled="true"/>
</OAuthV2>退貨
啟用 <GenerateResponse> 後,政策會傳回 JSON 回應。請注意,使用 client_credentials 授權類型時,系統不支援重新整理權杖。系統只會產生存取權杖。例如:
{ "issued_at": "1420260525643", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav", "organization_name": "docs" }
如果將 <GenerateResponse> 設為 False,政策不會傳回回應。而是會填入下列一組流程變數,其中包含存取權杖授權的相關資料。
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds例如:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
要求存取權杖:密碼授權類型
本節說明如何使用資源擁有者密碼憑證 (密碼) 授權類型流程,要求存取權杖。如要瞭解 OAuth 2.0 授權類型,請參閱「OAuth 2.0 簡介」。
如要進一步瞭解密碼授權類型,包括如何實作的 4 分鐘影片,請參閱「實作密碼授權類型」。
要求範例
如要瞭解如何編碼下列呼叫中的基本驗證標頭,請參閱「編碼基本驗證憑證」。
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST https://docs-test.apigee.net/oauth/token \ -d 'grant_type=password&username=the-user-name&password=the-users-password'
必要參數
根據預設,這些參數必須為 x-www-form-urlencoded,且在要求主體中指定 (如上例所示);不過,您可以設定附加至這個 /token 端點的 OAuthV2 政策中的 <GrantType>、<Username> 和 <Password> 元素,變更這項預設設定。詳情請參閱「OAuthV2 政策」。
使用者憑證通常會使用 LDAP 或 JavaScript 政策,針對憑證存放區進行驗證。
- grant_type - 必須設為
password值。 - username - 資源擁有者的使用者名稱。
- password - 資源擁有者的密碼。
選用參數
- 狀態 - 系統會將這個字串連同回應一併傳回。通常用於防範跨網站偽造要求攻擊。
- 範圍 - 可讓您篩選可使用所產生權杖的 API 產品清單。如要進一步瞭解範圍,請參閱「使用 OAuth2 範圍」。
驗證
您必須以基本驗證標頭 (Base64 編碼) 或表單參數 client_id 和 client_secret 傳遞用戶端 ID 和用戶端密鑰。您可以從與要求相關聯的已註冊開發人員應用程式取得這些值。另請參閱「編碼基本驗證憑證」。
範例端點
以下是產生存取權杖的端點設定範例。系統會執行 GenerateAccessToken 政策,該政策必須設定為支援密碼授權類型。
...
<Flow name="generate-access-token">
<Request>
<Step>
<Name>GenerateAccessToken</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
</Flow>
...範例政策
這是基本的 GenerateAccessToken 政策,設定為接受密碼授權類型。如要瞭解可透過這項政策設定的選用設定元素,請參閱「OAuthV2 政策」。
<OAuthV2 name="GenerateAccessToken">
<Operation>GenerateAccessToken</Operation>
<ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
<RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
<SupportedGrantTypes>
<GrantType>password</GrantType>
</SupportedGrantTypes>
<GenerateResponse enabled="true"/>
</OAuthV2>退貨
啟用 <GenerateResponse> 後,政策會傳回 JSON 回應。請注意,使用密碼授權類型時,系統會產生存取權杖和更新權杖。例如:
{ "issued_at": "1420258685042", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420258685042", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "0" }
如果將 <GenerateResponse> 設為 False,政策不會傳回回應。而是會填入下列一組流程變數,其中包含存取權杖授權的相關資料。
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status例如:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
要求存取權杖:隱含授權類型
本節說明如何使用隱含授權類型流程要求存取權杖。如要瞭解 OAuth 2.0 授權類型,請參閱「OAuth 2.0 簡介」。
要求範例
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'https://docs-test.apigee.net/oauth/implicit?response_type=token&client_id=ABC123&redirect_uri=http://callback-example.com'
必要參數
根據預設,這些參數必須是查詢參數 (如上例所示);不過,您可以在附加至這個 /token 端點的 OAuthV2 政策中設定 <ResponseType>、<ClientId> 和 <RedirectUri> 元素,變更這項預設設定。詳情請參閱「OAuthV2 政策」。
使用者憑證通常會透過 LDAP 服務呼叫或 JavaScript 政策,針對憑證存放區進行驗證。
- response_type - 必須設為
token值。 - client_id - 已註冊開發人員應用程式的用戶端 ID。
- redirect_uri - 如果註冊用戶端開發人員應用程式時未提供回呼 URI,則這個參數為必填。如果用戶端註冊時提供回呼網址,系統會與這個值進行比較,且兩者必須完全相符。
選用參數
- 狀態 - 系統會將這個字串連同回應一併傳回。通常用於防範跨網站偽造要求攻擊。
- 範圍 - 可讓您篩選可使用所產生權杖的 API 產品清單。如要進一步瞭解範圍,請參閱「使用 OAuth2 範圍」。
驗證
隱含授權不需要基本驗證。您必須傳遞用戶端 ID 做為要求參數,詳情請參閱這篇文章。
範例端點
以下是產生存取權杖的端點設定範例。這項政策會執行 GenerateAccessTokenImplicitGrant 政策。
... <Flow name="generate-access-token-implicit"> <Request> <Step> <Name>GenerateAccessTokenImplicitGrant</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition> </Flow> ...
範例政策
這是基本的 GenerateAccessTokenImplicitGrant 政策,可處理隱含授權類型流程的權杖要求。如要瞭解可透過這項政策設定的選用設定元素,請參閱「OAuthV2 政策」。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="GenerateAccessTokenImplicit">
<DisplayName>GenerateAccessTokenImplicit</DisplayName>
<Operation>GenerateAccessTokenImplicitGrant</Operation>
<GenerateResponse enabled="true"/>
</OAuthV2>退貨
啟用 <GenerateResponse> 後,政策會在回應標頭中傳回 302 Location 重新導向。重新導向會指向 redirect_uri 參數中指定的網址,並附加存取權杖和權杖到期時間。請注意,隱含授權類型不支援重新整理權杖。例如:
https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5
如果將 <GenerateResponse> 設為 False,政策不會傳回回應。而是會填入下列一組流程變數,其中包含存取權杖授權的相關資料。
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds例如:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
要求授權碼
如果您使用授權碼授權類型流程,必須先取得授權碼,才能要求存取權杖。
要求範例
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'
OAuthV2 GenerateAuthorizationCode 政策會附加至 /oauth/authorize Proxy 端點 (請參閱下方的範例端點)。
必要參數
根據預設,這些參數必須是查詢參數 (如上例所示);不過,您可以在附加至這個 /authorize 端點的 OAuthV2 政策中設定 <ResponseType>、<ClientId> 和 <RedirectUri> 元素,變更這項預設設定。詳情請參閱「OAuthV2 政策」。
- response_type - 必須設為
code值。 - client_id - 已註冊開發人員應用程式的用戶端 ID。
選用參數
- redirect_uri - 如果已在註冊的用戶端應用程式中指定完整 (而非部分) 的回呼 URI,這個參數為選用;否則為必要參數。回呼是 Edge 傳送新核發授權碼的網址。另請參閱「註冊應用程式及管理 API 金鑰」。
- 狀態 - 系統會將這個字串連同回應一併傳回。通常用於防範跨網站偽造要求攻擊。
- 範圍 - 可讓您篩選可使用所產生權杖的 API 產品清單。如要進一步瞭解範圍,請參閱「使用 OAuth2 範圍」。
驗證
不需要基本驗證,但必須在要求中提供已註冊用戶端應用程式的用戶端 ID。
範例端點
以下是產生授權碼的端點設定範例:
<OAuthV2 name="GenerateAuthorizationCode"> <Operation>GenerateAuthorizationCode</Operation> <!-- ExpiresIn, in milliseconds. The ref is optional. The explicitly specified value is the default, when the variable reference cannot be resolved. 60000 = 1 minute 120000 = 2 minutes --> <ExpiresIn>60000</ExpiresIn> <GenerateResponse enabled="true"/> </OAuthV2>
範例政策
這是基本的 GenerateAuthorizationCode 政策。如要瞭解可透過這項政策設定的選用設定元素,請參閱「OAuthV2 政策」。
<OAuthV2 name="GenerateAuthorizationCode">
<Operation>GenerateAuthorizationCode</Operation>
<GenerateResponse enabled="true"/>
</OAuthV2>退貨
啟用 <GenerateResponse> 後,政策會將 ?code 查詢參數連同授權碼傳回 redirect_uri (回呼 URI) 位置。系統會透過 302 瀏覽器重新導向傳送,網址位於回應的 Location 標頭中。例如:?code=123456。
如果 <GenerateResponse> 設為 false,政策不會傳回回應。而是會填入下列一組流程變數,其中包含授權碼的相關資料。
oauthv2authcode.{policy-name}.code
oauthv2authcode.{policy-name}.scope
oauthv2authcode.{policy-name}.redirect_uri
oauthv2authcode.{policy-name}.client_id例如:
oauthv2authcode.GenerateAuthorizationCode.code oauthv2authcode.GenerateAuthorizationCode.scope oauthv2authcode.GenerateAuthorizationCode.redirect_uri oauthv2authcode.GenerateAuthorizationCode.client_id
重新整理存取權杖
更新權杖是一種憑證,通常用於在存取權杖過期或失效後取得存取權杖。取得存取權杖時,回應中會傳回更新權杖。
如要使用更新權杖要求新的存取權杖,請執行下列操作:
要求範例
如要瞭解如何編碼下列呼叫中的基本驗證標頭,請參閱「編碼基本驗證憑證」。
$ curl -X POST \ -H "Content-type: application/x-www-form-urlencoded" \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \ -d 'grant_type=refresh_token&refresh_token=my-refresh-token'
必要參數
- grant_type - 必須設為
refresh_token值。 - refresh_token - 與您要更新的存取權杖相關聯的更新權杖。
根據預設,政策會尋找要求主體中指定的 x-www-form-urlencoded 參數,如上例所示。如要為這些輸入內容設定替代位置,可以在 OAuthV2 政策中使用 <GrantType> 和 <RefreshToken> 元素。詳情請參閱「OAuthV2 政策」。
選用參數
- state - 系統會將這個字串連同回應一併傳回。通常用於防範跨網站偽造要求攻擊。
- 範圍 - 可讓您篩選可使用所產生權杖的 API 產品清單。如要進一步瞭解範圍,請參閱「使用 OAuth2 範圍」。
驗證
- client_id
- client_secret
您必須以基本驗證標頭 (Base64 編碼) 或表單參數 client_id 和 client_secret 傳遞用戶端 ID 和用戶端密鑰。另請參閱「編碼基本驗證憑證」。
更新存取權杖時,使用者不必重新驗證身分。
以下是使用更新權杖產生存取權杖的範例端點設定。 系統會執行 RefreshAccessToken 政策。
...
<Flow name="generate-refresh-token">
<Request>
<Step>
<Name>RefreshAccessToken</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition>
</Flow>
...範例政策
這是基本 RefreshAccessToken 政策,已設定為接受 refresh_token 授權類型。如要瞭解可透過這項政策設定的選用設定元素,請參閱「OAuthV2 政策」。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="RefreshAccessToken">
<Operation>RefreshAccessToken</Operation>
<GenerateResponse enabled="true"/>
<ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
<RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
</OAuthV2>退貨
啟用 <GenerateResponse> 後,政策會傳回包含新存取權杖的 JSON 回應。refresh_token 授權類型支援鑄造存取權和新的更新權杖。例如:
{ "issued_at": "1420301470489", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "refresh_token_issued_at": "1420301470489", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "token_type": "BearerToken", "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "2" }
請注意,新的更新權杖核發後,原權杖就會失效。
如果 <GenerateResponse> 設為 true,就會收到上述回應。
如果將 <GenerateResponse> 設為 False,政策不會傳回回應。
而是會填入下列一組情境 (流程) 變數,其中包含與存取權杖授權相關的資料。
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status例如:
oauthv2accesstoken.RefreshAccessToken.access_token oauthv2accesstoken.RefreshAccessToken.expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at oauthv2accesstoken.RefreshAccessToken.refresh_token_status
編碼基本驗證憑證
當您發出 API 呼叫來要求權杖或授權碼時,建議您按照 IETF RFC 2617 的說明,將 client_id 和 client_secret 值做為 HTTP 基本驗證標頭傳遞,這是 OAuth 2.0 規格建議的做法。如要執行這項操作,您必須使用 base64 編碼,將兩個值合併,並以半形冒號分隔。
虛擬程式碼:
result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))在本範例中,ns4fQc14Zg4hKFCNaSzArVuwszX95X 是 client_id,ZIjFyTsNgQNyxI 則是 client secret。
無論您使用哪種程式設計語言計算 base64 編碼值,對於這些指定的用戶端憑證,base64 編碼結果都是:
bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==
接著,您可以按照下列方式提出權杖要求:
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
如果您使用 -u 選項,curl 公用程式實際上會為您建立 HTTP Basic 標頭。以下內容與上述內容等效:
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -u 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
其他程式設計環境可能也有類似的快速鍵,可自動產生以 base64 編碼的標頭。
雜湊處理資料庫中的權杖
為保護 OAuth 存取權和更新權杖,避免資料庫發生安全漏洞,您可以在 Edge 機構中啟用自動權杖雜湊功能。啟用這項功能後,Edge 會使用您指定的演算法,自動建立新產生的 OAuth 存取權和重新整理權杖的雜湊版本。(如要瞭解如何大量雜湊現有權杖,請參閱下文。)API 呼叫會使用未經過雜湊處理的權杖,而 Edge 會根據資料庫中的雜湊版本驗證這些權杖。
下列機構層級屬性可控制 OAuth 權杖雜湊。
features.isOAuthTokenHashingEnabled = true features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN
如果您有現有的雜湊權杖,並想保留這些權杖直到過期為止,請在貴機構中設定下列屬性,其中雜湊演算法與現有演算法相符 (例如 SHA1,這是先前的 Edge 預設值)。如果權杖未經過雜湊處理,請使用 PLAIN。
features.isOAuthTokenFallbackHashingEnabled = true features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN
如果您是 Edge Cloud 客戶,請與 Apigee Edge 支援團隊聯絡,在機構中設定這些屬性,並視需要大量雜湊現有權杖。
相關主題
- 導入用戶端憑證授權類型
- 導入授權碼授予類型
- API 安全性線上課程 (包括 OAuth)
- OAuthV2 政策:提供許多範例,說明如何向授權伺服器提出要求,以及如何設定 OAuthV2 政策。