我使用具有oauth2授权的Apigee配置了一个简单的API。在我的API中,我使用自定义ID来分隔不同的客户端。为了能够将此自定义ID检索到我的API,我在开发人员应用程序中创建了一个名为“ Tenant”的自定义属性。
我的oauth策略非常简单:
<OAuthV2 async="false" continueOnError="false" enabled="true" name="ValidateOAuth">
<DisplayName>ValidateOAuth</DisplayName>
<FaultRules/>
<Properties/>
<Attributes />
<ExternalAuthorization>false</ExternalAuthorization>
<Operation>VerifyAccessToken</Operation>
<SupportedGrantTypes/>
<Tokens/>
</OAuthV2>
当用户不使用我的API的公共网址时,我创建了一个条件流来应用此授权
<Flow name="Authorize">
<Description/>
<Request>
<Step>
<FaultRules/>
<Name>ValidateOAuth</Name>
</Step>
</Request>
<Response>
<Step>
<FaultRules/>
<Name>EchoTenant</Name>
</Step>
</Response>
<Condition>request.uri !~~ ".+(widget|tracker).+"</Condition>
</Flow>
在响应中,我准备了一个“分配消息”策略,以将我的tenantId添加到标头(其中xxx需要替换为正确的变量)
<AssignMessage async="false" continueOnError="false" enabled="true" name="EchoTenant">
<AssignTo createNew="false" type="response"></AssignTo>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<Set>
<Headers>
<Header name="X-Tenant">xxx</Header>
</Headers>
</Set>
</AssignMessage>
在文档中,我看到了一个示例,该示例使用2个mores策略检索开发者属性(如电子邮件):accessEntity和extractVariables。我尝试使用它们,但没有成功...就我而言,我无法访问ApiKey,我只有一个accessToken我认为吗?accessToken是否可以检索我的自定义应用程序属性?
在讨论中,迈克·邓克(Mike Dunker)写道
这实际上取决于您在运行代理时所拥有的信息。如果您使用OAuth或API密钥验证(通过OAuthV2和VerifyAPIKey策略),则在验证令牌或API密钥后会自动填充自定义属性。实际上,我发现我几乎不需要调用AccessEntity。
我尝试使用跟踪工具查看成功授权后发送的信息,但没有看到我的租户ID。也许对我的问题有更好的解决方案谢谢您的帮助!
使用VerifyAccessToken验证您的OAuth令牌。在VerifyAccessToken之后,尝试访问app.{custom_attribute_name}
。您可能不会在跟踪工具中看到此值,因为从VerifyAccessToken中填充了许多变量。
如果你没有在你的流程需要VerifyAccessToken(在大多数情况下,你会),也有GetOauthv2info它执行same--更多信息在这里。该变量将是oauthv2client.{policy_name}.{custom_attribute_name}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句