请求访问令牌和授权代码

您正在查看的是 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 政策,后者必须配置为支持 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

可选参数

  • 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 代理端点(请参阅下面的示例端点)。

必需参数

默认情况下,这些参数必须是查询参数(如上例所示);但是,您可以通过配置附加到此 /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 浏览器重定向发送,并在响应的 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 - 随响应一起发回的字符串。通常用于防止跨网站请求伪造攻击。
  • 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 规范也推荐以 HTTP-Basic 身份验证标头的形式传递 client_id 和 client_secret 值,如 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 云客户,请与 Apigee Edge 支持团队联系,为您的组织设置这些属性,并根据需要对现有令牌进行批量哈希处理。

相关主题