Azure API管理速率限制策略-阅读Cookie属性

mzillmmw  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(99)

我们一直在使用Azure API Management的Rate Limiting by JWT,并遵循以下说明:
https://learn.microsoft.com/en-us/azure/api-management/api-management-sample-flexible-throttling#user-identity-throttling
但是现在我们将JWT从“授权”头移动到Cookie,这是出于一些业务原因。
有没有一种方法可以从请求中读取Cookie,然后从Cookie(jwt)中读取特定的属性,这样我们就可以继续这样做?
我可以在APIM策略中使用以下代码读取整个Cookie:

var cookie = context.Request.Headers.GetValueOrDefault("Cookie","");

字符串
但这会读取整个cookie字符串,如下所示:

SSID=143443; Version=C5.4.0; Subject=Xyz; Token=<jwt>;


我需要能够从APIM策略中的这个字符串中提取令牌部分

cnh2zyt3

cnh2zyt31#

您可以提取令牌并将其存储在变量中。
为了只提取Token值,可以使用Regex:Token=([\\S]*);
请找到完整的inbound策略,并阅读和返回Token值:

<inbound>
    <base />
    <set-variable name="jwt" value="@{
        var cookie = context.Request.Headers.GetValueOrDefault("Cookie","");
        var pattern = "Token=([\\S]*);";

        var regex = new Regex(pattern, RegexOptions.IgnoreCase);
        Match match = regex.Match(cookie);
        if(match.Success && match.Groups.Count == 2)
        {
            return match.Groups[1].Value;
        }

        return "";
    }" />
    <return-response>
        <set-status code="200" reason="OK" />
        <set-body>@(context.Variables.GetValueOrDefault<string>("jwt"))</set-body>
    </return-response>
</inbound>

字符串
API管理中的测试:


的数据

相关问题