如何配置Azure APIM以根据用户路由到不同的后端?

时间:2019-07-05 21:59:11

标签: azure-api-management

我有多次运行相同的API并连接到不同的数据库,这些数据库代表每个连接的用户的私有数据。

我有一个通过Active Directory进行身份验证的网站,以确定哪个用户已连接。无论哪个用户登录,都进行相同的API调用,但是,API调用根目录下的主机必须取决于登录的用户。

如何根据从Active Directory登录的用户,将Azure API管理配置为路由到正确的主机?

之所以使用此体系结构,是有更大的原因,因此请不要在此处提出解决可扩展性选项的替代方案。

我只想知道如何在APIM中基于用户进行路由。

2 个答案:

答案 0 :(得分:1)

使用设置后端策略即时更改后端

答案 1 :(得分:0)

Azure API管理内置了“用户和组”(尽管也可以使用AD等外部源)。

如果使用这些用户和组(而不是外部的 ),则可以编写如下策略来进行路由:

<policies>
    <inbound>
        <choose>
            <when condition="@(context.User.Groups.Select(g => g.Name).Contains("org1"))">
                <set-backend-service base-url="https://abc-apim.azure-api.net/org1app" />
            </when>
            <when condition="@(context.User.Groups.Select(g => g.Name).Contains("org2"))">
                <set-backend-service base-url="https://abc-apim.azure-api.net/org2app" />
            </when>
            <otherwise>
                <return-response>
                    <set-status code="401" reason="Unauthorized" />
                    <set-header name="WWW-Authenticate" exists-action="override">
                        <value>Bearer error="Invalid user group"</value>
                    </set-header>
                </return-response>
            </otherwise>
        </choose>
        <base />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>