我使用带有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>
在响应中,我准备了一个Assign Message策略来添加到标题my 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个以上策略的电子邮件:accessEntity和extractVariables。我尝试使用它们但没有成功...... 在我的情况下,我无法访问ApiKey,我认为我只有一个accessToken?是否可以使用accessToken检索我的自定义应用属性?
在此discussion中,Mike Dunker写了
这实际上取决于代理服务器上的信息 运行。如果您正在使用OAuth或API密钥验证(通过OAuthV2 和VerifyAPIKey策略),自动属性 在验证令牌或API密钥后填充。在实践中我发现 我很少需要调用AccessEntity。
我尝试使用跟踪工具查看成功授权后发送的信息,但我没有看到我的租户ID。也许有一个更好的解决方案来解决我的问题 谢谢你的帮助!
答案 0 :(得分:0)
使用VerifyAccessToken验证您的OAuth令牌。在VerifyAccessToken之后,尝试访问app.{custom_attribute_name}
。您可能无法在跟踪工具中看到此值,因为从VerifyAccessToken填充了许多变量。
如果你不想在你的流程中使用VerifyAccessToken(在大多数情况下你会这样做),那么GetOauthv2info也可以做同样的事情 - 更多信息here。变量将为oauthv2client.{policy_name}.{custom_attribute_name}