验证Azure APIM策略中的多个颁发者

时间:2020-09-02 06:57:20

标签: azure azure-api-management

我工作的公司多年来已经购买了多种产品。
我们一直在开发共享的微服务生态系统。
产品(当前)通过不同的IDP(例如Auth0,Azure B2C)进行身份验证。 后端微服务可以很好地处理多个发行者,但是我们也想在API网关Azure Azure上进行authN检查,如果JWT acces-token无效,则短路。

如何在Azure APIM中验证多个发行者?

docs中,我可以指定多个颁发者,但是只有1个openid-config。如果只有1个openid-config,如何获得多个发行者的公共签名密钥?大概是为了得到JWKS端点,然后是验证令牌签名的信息...

这是我正在谈论的APIM(入站)策略的一部分:

<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized" require-expiration-time="true" require-signed-tokens="true">
    <openid-config url="https://example-company.au.auth0.com/.well-known/openid-configuration" />
    <audiences>
        <audience>test</audience>
        <audience>blah</audience>
    </audiences>
    <issuers>
        <issuer>https://example-company.au.auth0.com</issuer>
        <issuer>http://contoso.com/</issuer>
    </issuers>
</validate-jwt>

2 个答案:

答案 0 :(得分:0)

APIM确实读取了完整的OpenID connect配置和链接的JWKS,以获取密钥和有效发行者的列表。同时,您拥有的样本也应该可以正常工作,OIDC的发卡行和明确指定的发卡行将被合并。

答案 1 :(得分:0)

只是澄清一下;我工作的公司有多个产品,每个产品都有一个单独的IDP和/或租户-基本上,产品之间没有使用交叉的地方。

validate-jwt策略仅允许1个openid-config元素,但是对于我的情况,我有多个OpenId配置...

通过以下操作,我设法解决了这个问题:

<choose>
    <when condition="@(context.Request.Headers.GetValueOrDefault("X-ProductCode","") == "XYZ")">
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized" require-expiration-time="true" require-signed-tokens="true">
            <openid-config url="https://xyz.au.auth0.com/.well-known/openid-configuration" />
            <audiences>
                <audience>xyz-audience1</audience>
            </audiences>
        </validate-jwt>
    </when>
    <when condition="@(context.Request.Headers.GetValueOrDefault("X-ProductCode","") == "ABC")">
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized" require-expiration-time="true" require-signed-tokens="true">
            <openid-config url="https://abc.au.auth0.com/.well-known/openid-configuration" />
            <audiences>
                <audience>abc-audience1</audience>
                <audience>abc-audience2</audience>
            </audiences>
        </validate-jwt>
    </when>
</choose>