我们使用 Azure API 管理来托管我们的 API,并使用 Keycloak 作为身份验证提供程序。 我们为客户提供这项服务,每个客户都有自己的Keycloak Realm。
对于每个领域,我们必须在 OAuth 刀片中向 Azure APIM 添加配置。
然后我们必须克隆我们的 API,以便将身份验证提供程序链接到它。
有没有人知道我们可以有一个单一的身份验证提供程序配置,我们链接到一个API,它路由到正确的领域或其他一些更顺利地处理此身份验证的方式?
有没有人知道我们可以有一个单一的身份验证提供程序配置,我们链接到一个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中的回答。