要求存取權杖和授權碼

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件

在本主題中,我們將說明如何要求存取權杖和授權碼、設定 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 參數,且您並未提供這個參數,這項政策就會使用開發人員註冊時提供的回呼網址值。

自選參數

  • state - 隨回應一併傳回的字串。通常用於防範跨網站要求偽造的攻擊。
  • scope - 可讓您篩選可以使用最低權杖的 API 產品清單。若要進一步瞭解範圍,請參閱使用 OAuth2 範圍

身分驗證

您必須以基本驗證標頭 (採用 Base64 編碼) 或格式為 client_idclient_secret 的形式,傳送用戶端 ID 和用戶端密鑰。您可以從已註冊的開發人員應用程式取得這些值。另請參閱「對基本驗證憑證進行編碼」。

範例端點

以下是產生存取權杖的端點設定範例。系統會執行 GenerateAccessToken 政策,只要將政策設為支援授權_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 值。

自選參數

  • state - 隨回應一併傳回的字串。通常用於防範跨網站要求偽造的攻擊。
  • scope - 可讓您篩選可以使用最低權杖的 API 產品清單。若要進一步瞭解範圍,請參閱使用 OAuth2 範圍

身分驗證

您必須以基本驗證標頭 (採用 Base64 編碼) 或格式為 client_idclient_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:資源擁有者的密碼,

自選參數

  • state - 隨回應一併傳回的字串。通常用於防範跨網站要求偽造的攻擊。
  • scope - 可讓您篩選可以使用最低權杖的 API 產品清單。若要進一步瞭解範圍,請參閱使用 OAuth2 範圍

身分驗證

您必須以基本驗證標頭 (採用 Base64 編碼) 或格式為 client_idclient_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,就必須使用這個參數。如果在註冊時提供回呼網址,系統會將這個值與這個值進行比較,因此兩者必須完全相符。

自選參數

  • state - 隨回應一併傳回的字串。通常用於防範跨網站要求偽造的攻擊。
  • scope - 可讓您篩選可以使用最低權杖的 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 位置重新導向。重新導向會指向 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 金鑰」。
  • state - 隨回應一併傳回的字串。通常用於防範跨網站要求偽造的攻擊。
  • scope - 可讓您篩選可以使用最低權杖的 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 瀏覽器重新導向,在回應的位置位置標頭中以網址傳送。例如:?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 - 隨回應一併傳回的字串。通常用於防範跨網站要求偽造的攻擊。
  • scope - 可讓您篩選可以使用最低權杖的 API 產品清單。若要進一步瞭解範圍,請參閱使用 OAuth2 範圍

身分驗證

  • client_id
  • client_secret

您必須以基本驗證標頭 (採用 Base64 編碼) 或格式為 client_idclient_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 呼叫要求權杖或驗證碼時,這是很好的做法,並且是獲得 OAuth 2.0 規格的建議,能將 client_id 和 client_secret 的值做為 HTTP-Basic 驗證標頭使用,如 IETF RFC 2617 所述。方法是將彙整兩個值的結果及半形冒號分隔,並以 Base64 編碼。

在虛擬程式碼中:

result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))

在此範例中,ns4fQc14Zg4hKFCNaSzArVuwszX95X 為 client_id,ZIjFyTsNgQNyxI 則是用戶端密鑰。

無論用來計算 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 基本標頭。相當於上述項目:

$ 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 支援團隊聯絡,在機構中設定這些屬性,並視需要選擇大量雜湊現有權杖。

相關主題