1

我想在验证 apikey 时在 apigee 边缘提出错误。这是正确的方法吗?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GetOAuthV1Info enabled="true" continueOnError="false" async="false" name="ValidateAPIKey">
    <DisplayName>Validate API Key Policy</DisplayName>

    <FaultRules>
      <FaultRule>
        <Description>InvalidApiKey</Description>
        <Condition>(flow.param.apikey)=NULL</Condition>
      </FaultRule>

    </FaultRules>

    <Properties/>
    <AppKey ref="flow.param.apikey"/>
</GetOAuthV1Info>
4

4 回答 4

2

VerifyApiKey如果密钥为空或未通过,则策略(或 GetOAuthV1Info 策略)本身将引发错误。无需RaiseFault显式调用。

典型的 VerifyApiKey 用法是这样的:

<VerifyAPIKey enabled='true' name='VerifyKey-1'>
  <DisplayName>Verify API Key</DisplayName>
  <APIKey ref='request.queryparam.apikey'></APIKey>
</VerifyAPIKey>

如果您想在运行该策略之前先检查是否存在 apikey,那么您可以添加这样的流程步骤

<Request>
  <Step>
    <Condition>(request.queryparam.key=null) or (request.queryparam.key=EMPTY)</Condition>
    <Name>RaiseFault-key_not_found</Name>
  </Step>
  <Step>
    <Name>VerifyKey-1</Name>
  </Step>
</Request>

RaiseFault-key_not_found是一项RaiseFault政策,如下所示:

<RaiseFault name="RaiseFault-key_not_found">
  <FaultResponse>
    <Set>
      <Payload contentType="application/xml">
        <consumer>
          <error>
            <message>Key doesn't Exists</message>
          </error>
        </consumer>
      </Payload>
    </Set>
  </FaultResponse>
</RaiseFault>

当然,如果您愿意,该有效负载可以是 JSON 或纯文本或其他内容。

于 2014-01-15T04:51:33.157 回答
1

我相信现在处理策略的错误已经发生了一些变化。但未在策略架构或Apigee 文档中正确反映

在策略/步骤定义中定义故障规则现在不起作用。您必须将故障规则定义为流程,如前置流程或后流程,并在其中包含您的故障定义。如下图所示。。

<ProxyEndpoint name="default"> 
<Description/> 
<FaultRules> 
<FaultRule name="InvalidApiKeyXml"> 
<Condition>fault.name == &quot;InvalidApiKey&quot;</Condition> 
<Step> 
<Name>invalidAccessForXML</Name> <!-- step to call on fault could be a raise fault or assignmessage policy --> 
</Step> 
</FaultRule> 
</FaultRules>
... 
</Flows> 
... 
</ProxyEndpoint>

并且不在您使用的政策范围内:验证 API 密钥政策

<FaultRules>
  <FaultRule>
    <Description>InvalidApiKey</Description>
    <Condition>(flow.param.apikey)=NULL</Condition>
  </FaultRule>

</FaultRules>

<Properties/>
<AppKey ref="flow.param.apikey"/>

于 2014-01-16T07:14:04.303 回答
0

如果您想处理缺少 API 密钥的故障,该错误代码是这样的:

{“错误代码”:“steps.oauth.v2.FailedToResolveAPIKey”}

您可能想在掌握它的同时使用 API 密钥示例:

https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/apikey

于 2014-01-14T18:51:11.520 回答
0

您的故障规则如下所示

 <FaultRule>
    <Name>InvalidApiKey</Description>
    <Condition>(fault.name = oauth.v2.InvalidApiKey)</Condition>
</FaultRule>

Name 元素引用一个策略,通常是一个 AssignMessage 策略,它为错误条件创建响应消息。

Condition 元素定义将触发策略的条件。每个策略都定义了一个错误代码列表,您可以将其用作 fault.name 变量。

您可以在此处阅读有关故障处理的更多信息:

http://apigee.com/docs/api-services/content/fault-handling

于 2014-01-14T18:03:59.770 回答