如何在不使用<generateresponse> tag?</generateresponse>时处理OAuth 2.0策略错误

时间:2014-08-13 02:37:41

标签: oauth-2.0 apigee

我正在创建自己的OAuth 2.0端点,并使用Apigee的OAuth 2.0策略来生成和管理授权码和令牌。 当OAuth 2.0策略失败时(http://apigee.com/docs/gateway-services/api/oauth-error-code-reference),该文档指定了所有可能的错误代码错误描述,但它没有说明哪些流变量将包含相应的错误代码错误说明http://apigee.com/docs/api-services/api/oauth-flow-variables上的文档也无济于事......它只是解释了成功上设置的流量变量。

我不想在OAuth策略中使用GenerateResponse标记,因此我需要在OAuth策略失败时访问错误代码和错误说明。

OAuth策略失败时设置了哪些变量? 如何知道OAuth策略失败了?

到目前为止,我知道变量fault.name似乎有错误代码,但错误描述不在error.message变量中。

示例政策:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-Exchange-Code-with-Token">
  <DisplayName>OAuth Exchange Code with Token</DisplayName>
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <ReuseRefreshToken>false</ReuseRefreshToken>
  <RefreshTokenExpiresIn>3600000</RefreshTokenExpiresIn>
  <SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="false"/>
</OAuthV2>

如果上述策略失败,由于<GenerateResponse enabled="false"/>被禁用,我希望自己在<FaultRules>中生成一个响应并访问实际的错误描述,例如“需要客户端凭据”。但是没有流变量来访问错误描述。

1 个答案:

答案 0 :(得分:1)

OAuth策略,如果使用属性continueOnError =&#34; false&#34;设置,将在发生错误时中止处理并跳转到FaultRules。

使用以下OAuthV2策略验证令牌(注意GenerateResponse为false且continueOnError为false):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 async="false" continueOnError="false" enabled="true" name="VerifyToken">
    <DisplayName>VerifyToken</DisplayName>
    <Attributes/>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>VerifyAccessToken</Operation>
    <SupportedGrantTypes/>
    <GenerateResponse enabled="false"/>
    <Tokens/>
</OAuthV2>

当没有出现访问令牌时,处理跳转到FaultRules。在FaultRule中,我能够访问以下变量:

fault.name = "InvalidAccessToken"
fault.category = "Step"
fault.subcategory = "Execution"
error.state = PROXY_REQ_FLOW
error.content = {"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}

因此,即使GenerateResponse为false,您也可以使用JSONPath提取$.fault.faultstring$.fault.detail.errorcode