我有多次运行相同的API并连接到不同的数据库,这些数据库代表每个连接的用户的私有数据。
我有一个通过Active Directory进行身份验证的网站,以确定哪个用户已连接。无论哪个用户登录,都进行相同的API调用,但是,API调用根目录下的主机必须取决于登录的用户。
如何根据从Active Directory登录的用户,将Azure API管理配置为路由到正确的主机?
之所以使用此体系结构,是有更大的原因,因此请不要在此处提出解决可扩展性选项的替代方案。
我只想知道如何在APIM中基于用户进行路由。
答案 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>