api 的 Azure Apim 身份验证

Posted

技术标签:

【中文标题】api 的 Azure Apim 身份验证【英文标题】:Azure Apim authentication for apis 【发布时间】:2020-10-08 03:31:50 【问题描述】:

我有一个被多个公共客户端使用的 api 端点。并且每个客户端都配置了不同的clientid。我正在使用带有 Oauth2 openid 协议的授权码流。我想介绍一个 Azure Apim 服务,并想在将请求转发到 api 之前验证 jwt 令牌。您能否告诉我如何实现这一目标?

注意:我不能使用单个客户端 ID,因为每个客户端的重定向 uri 都不同。

【问题讨论】:

【参考方案1】:

您可以使用Validate JWT 策略通过验证每个传入请求的访问令牌来对 API 管理中的请求进行预授权。如果请求没有有效的令牌,API 管理会阻止它。例如,将以下策略添加到 Echo API 的 <inbound> 策略部分。它检查访问令牌中的受众声明,如果令牌无效,则返回错误消息。

<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
    <openid-config url="https://login.microsoftonline.com/aad-tenant/.well-known/openid-configuration" />
    <required-claims>
        <claim name="aud">
            <value>Application ID of backend-app</value>
        </claim>
    </required-claims>
</validate-jwt>

更多详情可以参考Configure a JWT validation policy to pre-authorize requests的文章

【讨论】:

这里您可以为一个客户端配置。我们如何为同一个 api 管理多个客户端? 您可以使用choose policy,它类似于编程语言中的 if-then-else 或 switch 构造。

以上是关于api 的 Azure Apim 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Azure API 管理 - 与底层服务进行身份验证和授权同步

Azure API 管理 - 仅在设置标记时应用策略

WSO2 APIM 的自定义身份验证

Azure API 管理 + Azure 函数和托管标识

WSO2IS/APIM:如何在自定义身份验证器中分配用户角色

Azure Api 规则不适用于使用具有身份验证基本和身份验证证书的默认助手