【问题标题】:How to handle OAuth 2.0 policy Errors when NOT using <GenerateResponse/> tag?不使用 <GenerateResponse/> 标签时如何处理 OAuth 2.0 策略错误?
【发布时间】:2014-08-15 04:42:31
【问题描述】:

我正在创建自己的 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 的文档也无济于事......它只是解释了 success 上设置的流变量。

我不想在我的 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>

如果上述策略失败,由于&lt;GenerateResponse enabled="false"/&gt; 被禁用,我喜欢自己在&lt;FaultRules&gt; 中生成响应并访问实际的错误描述,例如“需要客户端凭据”。但是没有流变量可以访问错误描述。

【问题讨论】:

    标签: oauth-2.0 apigee


    【解决方案1】:

    如果使用属性 continueOnError="false" 设置 OAuth 策略,则会在发生错误时中止处理并跳转到 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

    【讨论】:

    • 谢谢,但我还是有同样的问题。例如,在 GrantType authorization_codeGenerateAccessToken 策略中,当客户端不提供有效的 client_secret 时,生成的响应将类似于:{"ErrorCode":"invalid_client","Error":"Client credentials are required"} 但是fault.name,@ 987654330@, error.content ALL 将只包含:invalid_client
    • 您能否发布您正在使用的确切 GenerateAccessToken 策略配置和输入,以便我可以使用它进行测试? (没有真实的主机名、用户名、密码等)
    猜你喜欢
    • 2014-12-19
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    相关资源
    最近更新 更多