当使用带有 Keycloak OAuth 提供程序和多个领域的 Azure APIM 时,我们如何为 API 上的 OAuth 创建单个配置而不是 1/领域

问题描述 投票:0回答:1

我们使用 Azure API 管理来托管我们的 API,并使用 Keycloak 作为身份验证提供程序。 我们为客户提供这项服务,每个客户都有自己的Keycloak Realm。

对于每个领域,我们必须在 OAuth 刀片中向 Azure APIM 添加配置。

然后我们必须克隆我们的 API,以便将身份验证提供程序链接到它。

有没有人知道我们可以有一个单一的身份验证提供程序配置,我们链接到一个API,它路由到正确的领域或其他一些更顺利地处理此身份验证的方式?

oauth keycloak multi-tenant azure-api-management apim
1个回答
0
投票

有没有人知道我们可以有一个单一的身份验证提供程序配置,我们链接到一个API,它路由到正确的领域或其他一些更顺利地处理此身份验证的方式?

据我所知,APIM 中没有此类内置功能,但您可以利用策略将 Keycloak 领域映射到每个客户。

您可以根据 customerId 使用以下政策。

<inbound>
    <base />
    <choose>
        <when condition="@(context.Request.Headers.GetValueOrDefault("CustomerID") == "{First_CustomerID}")">
            <validate-jwt  header-name="Authorization"  failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
                <openid-config  url="{Keyclock url}"/>
            </validate-jwt>
        </when>
        <when condition="@(context.Request.Headers.GetValueOrDefault("CustomerID") == "{Second_CustomerID}")">
            <validate-jwt  header-name="Authorization"  failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
                <openid-config  url="{Keyclock url}"/>
            </validate-jwt>
        </when>
    </choose>
</inbound>

您可以参考Validate-JWT政策了解更多信息。

您也可以参考我在这个SO-Thread中的回答。

© www.soinside.com 2019 - 2024. All rights reserved.