我正在使用GetAPIProduct政策(请参阅http://apigee.com/docs/gateway-services/content/retrieve-api-product-settings-using-getapiproduct 获取范围列表。然后在一个JavaScript标注中,我尝试引用该范围列表,但不是文本我得到这样的东西(最后的十六进制块随每次调用而变化):
[Ljava.lang.String;@19baa7ed
似乎无法将其转换为我可以使用Javascript访问的数组。我是一个免费的组织,所以Java不是一个选择。我已经尝试了String(),myvar.toString(),甚至还没有看到在Apigee中存在的Rhino context.javaToJs。
如何将此转换为字符串的任何想法?
答案 0 :(得分:1)
事实证明getapiproduct.{policyname}.apiproduct.scopes
的值是一个从零开始的对象数组。但是,每个对象都可以转换为作为范围名称的字符串。
以下是访问范围数组的方法:
var scopeArray=context.getVariable("getapiproduct.RetrieveProductInfo.apiproduct.scopes");
// you can use either of these methods to convert the array elements
var firstElement = String(scopeArray[0]);
var secondElement = scopeArray[1]+'';
var scopeArrayLen = scopeArray.length;
答案 1 :(得分:1)
这不是问题的答案,但是一些可能有价值的附加信息。
GetAPIPRoductInfo
获取产品的范围列表。相反,GetOAuthV2Info
策略获取有关OAUthV2令牌的信息。假设你有一个令牌,你可以这样做:
<GetOAuthV2Info name='GetOAuthV2Info-TokenScopes'>
<!-- use one of the following: a referenced variable or -->
<!-- an explicitly passed access_token -->
<AccessToken ref='access_token'/>
<!--
On Success, the following flow variables will be set.
oauthv2accesstoken.{policy_name}.access_token
oauthv2accesstoken.{policy_name}.scope
oauthv2accesstoken.{policy_name}.refresh_token
oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name}
oauthv2accesstoken.{policy_name}.developer.id
oauthv2accesstoken.{policy_name}.developer.app.name
oauthv2accesstoken.{policy_name}.expires_in
oauthv2accesstoken.{policy_name}.status
-->
</GetOAuthV2Info>
然后,您可以在后续的JS标注中使用该信息,以根据您的要求检查令牌的范围:
// checkScope.js
// ------------------------------------------------------------------
var varname = 'oauthv2accesstoken.GetOAuthV2Info-TokenScopes.scope',
approvedScopes = context.getVariable(varname),
check = false;
approvedScopes = approvedScopes.split(' ');
// approvedScopes is now a JavaScript array of strings, that lists
// the scopes the user approved for the requesting client (app).
//
// You can now compare that list against the scopes required
// for an operation or resource, and then set a variable
// determining whether the token is good for the request.
context.setVariable('scopeCheck.ok', check);