C#을 사용하는 Azure API 관리 고급 정책 - II

3526 단어
이 문서에서는 정책에서 IP 제한을 적용하기 위해 NamedValue json 콘텐츠를 가져오고 JObject에 로드하고 APIM 정책 내에서 LINQ 쿼리를 사용하는 방법을 볼 수 있습니다.

또한 이 문서의 I부here를 참조하십시오.

조건 및 Ip 필터 정책과 고급 C# 코드 내부 정책을 수행할 수 있는 MSDN의 다음this article을 통해 수행할 수 있습니다.

먼저 Namedvalues ​​탭 아래의 Api Management 내에서 Namedvalue를 만듭니다.



키 이름: IpAllowList 값:

[
{
"User":"user1",
"subscriptionKey":"subskeyforuser1",
"AllowedIps" : ["192.168.1.3","192.168.1.4","192.168.1.5","192.168.3.4","13.91.284.72"]
}
 ]



정책 내에서 Namedvalue json 콘텐츠를 가져오려면 아래 코드를 사용하세요.

<set-variable name="IAllowListNamdval" value="{{IpAllowList}}" />



요청 헤더 또는 매개변수에 제공된 구독 키를 얻으려면 아래 코드를 사용하십시오.

<set-variable name="SubscriptionKeyVar" value="@{ string[] value; string value2;
            if (context.Request.Headers.TryGetValue("Ocp-Apim-Subscription-Key", out value))
            { if(value != null && value.Length > 0)
                {
                    return value[0];
                }
            }
            else if(context.Request.MatchedParameters.TryGetValue("Ocp-Apim-Subscription-Key", out value2))
            { if(value2 != null && value2 != "")
                {
                    return value2;
                }
            }
            return null;
        }" />



Namedvalue에서 얻은 json 배열에 LINQ 쿼리를 사용하면 아래 코드를 참조하십시오.

<set-variable name="AlwdIpForUser" value="@{
                    var jsonval = JArray.Parse((string)context.Variables.GetValueOrDefault<string>("IAllowListNamdval"));
                    var arr = jsonval.Where(m => m["subscriptionKey"].Value<string>() == (string)context.Variables.GetValueOrDefault<string>("SubscriptionKeyVar")).SelectMany(y => (JArray)y["AllowedIps"]);
                    return arr.Any(t => t.Value<string>() == (string)context.Request.IpAddress); }" />



그런 다음 아래 코드로 IP를 차단하는 결과를 사용합니다.

<choose>
            <when condition="@(!(bool)context.Variables.GetValueOrDefault<bool>("AlwdIpForUser"))">
                <ip-filter action="forbid">
                    <address>@(context.Request.IpAddress)</address>
                </ip-filter>
            </when>
        </choose>


[
{
"User":"user1",
"subscriptionKey":"subskeyforuser1",
"AllowedIps" : ["192.168.1.3","192.168.1.4","192.168.1.5","192.168.3.4","13.91.284.72"]
}
 ]



위의 단계에 따라 IP를 필터링하고 차단할 수 있습니다. Namedvalue에서 구독 키 기반 사용자 및 해당 IP 차단이 적용될 수 있는 이 구조의 json 콘텐츠를 가질 수 있습니다.

좋은 웹페이지 즐겨찾기