我想在验证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>
答案 0 :(得分:2)
如果密钥为null或未通过,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或纯文本或其他内容。
答案 1 :(得分:1)
我认为处理策略的故障现在已经改变了一点。但尚未在政策模式或Apigee docs
中正确反映出来在策略/步骤定义中定义故障规则现在不起作用。 您必须将故障规则定义为流前或后流等流程,并在其中包含故障定义。如下图所示..
<ProxyEndpoint name="default">
<Description/>
<FaultRules>
<FaultRule name="InvalidApiKeyXml">
<Condition>fault.name == "InvalidApiKey"</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"/>
答案 2 :(得分:0)
你的错误规则看起来像这样
<FaultRule>
<Name>InvalidApiKey</Description>
<Condition>(fault.name = oauth.v2.InvalidApiKey)</Condition>
</FaultRule>
Name元素引用一个策略,通常是AssignMessage策略,它为错误条件创建响应消息。
Condition元素定义将触发策略的条件。每个策略都定义了一个错误代码列表,您可以将其用作fault.name变量。
您可以在此处阅读有关故障处理的更多信息:
答案 3 :(得分:0)
如果您想为缺少的API密钥处理错误,那么错误代码就是:
{ “错误代码”: “steps.oauth.v2.FailedToResolveAPIKey”}
您可能想要使用API密钥示例,同时掌握它:
https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/apikey