Jwt Azure APIM策略编辑器

Jwt Azure APIM策略编辑器,jwt,xml-attribute,azure-api-management,Jwt,Xml Attribute,Azure Api Management,我非常希望能够根据用户的Jwt索赔数据设置Azure API策略属性。我已经能够为计数器键和增量条件等设置字符串值,但我不能设置所有属性。我想象着这样做: <rate-limit-by-key calls="@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Limit", "5"))" renewal-period="@((int) context.

我非常希望能够根据用户的Jwt索赔数据设置Azure API策略属性。我已经能够为计数器键和增量条件等设置字符串值,但我不能设置所有属性。我想象着这样做:

<rate-limit-by-key 
   calls="@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Limit", "5"))" 
   renewal-period="@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Duration/InSeconds", "60"))" 
   counter-key="@((string)context.Variables["Subject"])" 
   increment-condition="@(context.Response.StatusCode == 200)"
/>
我甚至无法设置字符串参数(尽管格式严格)

我已经尝试了大量的变体转换,Convert.ToInt32,声明不是字符串,@{return 5},@(5)等等,但是似乎在save time中发生了一些验证,从而停止了转换


我认为这将是一个有用的功能,可以添加到我的API中。这个问题是否有其他解决方案?

按键速率限制和按键配额调用属性不支持策略表达式。不幸的是,内部限制阻碍了我们按请求处理它。您所能做的就是将请求分类为几个有限的组,并使用choose策略有条件地应用速率限制/配额


或者尝试使用“增量计数”属性控制每个请求增加多少计数器。

调用“按键速率限制”和“按键配额”属性不支持策略表达式。不幸的是,内部限制阻碍了我们按请求处理它。您所能做的就是将请求分类为几个有限的组,并使用choose策略有条件地应用速率限制/配额

或者尝试使用incrementcount属性来控制每个请求增加多少计数器

Error in element 'rate-limit-by-key' on line 98, column 10: The 'calls' attribute is invalid - The value '@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Limit", "5"))' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string '@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Limit", "5"))' is not a valid Int32 value.
<quota-by-key 
    calls="10"
    bandwidth="100" 
    renewal-period="@((string) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/Quota/RenewalPeriod", "P00Y00M01DT00H00M00S"))"
    counter-key="@((string)context.Variables["Subject"])"
/>
Error in element 'quota-by-key' on line 99, column 6: @((string) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/Quota/RenewalPeriod", "P00Y00M01DT00H00M00S")) is not in a valid format. Provide number of seconds or use 'PxYxMxDTxHxMxS' format where 'x' is a number.