Apigee - 在成功执行oauth2验证后检索应用程序自定义属性

时间:2014-12-09 10:12:49

标签: api oauth apigee

我使用带有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。也许有一个更好的解决方案来解决我的问题 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

使用VerifyAccessToken验证您的OAuth令牌。在VerifyAccessToken之后,尝试访问app.{custom_attribute_name}。您可能无法在跟踪工具中看到此值,因为从VerifyAccessToken填充了许多变量。

如果你不想在你的流程中使用VerifyAccessToken(在大多数情况下你会这样做),那么GetOauthv2info也可以做同样的事情 - 更多信息here。变量将为oauthv2client.{policy_name}.{custom_attribute_name}