Azure APIM 和函数应用程序 - 后端身份验证

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

我们有几个使用 APIM 向客户端公开的函数应用 API。我们目前正在测试身份验证过程,客户端将使用订阅密钥来访问 APIM 网关。然后,后端授权将通过 AAD 或托管的 APIM 授权进行处理。

我们已按照链接配置了授权(AAD - 客户端凭据), 使用的政策

<inbound>
    <base />
    <get-authorization-context provider-id="aad2" authorization-id="aad2" context-variable-name="auth-context" identity-type="managed" ignore-error="false" />
    <set-header name="authorization" exists-action="override">
        <value>@("Bearer " + ((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)</value>
    </set-header>
    <set-header name="apikey" exists-action="delete" />
    <set-header name="x-functions-key" exists-action="delete" />
</inbound>

并按照链接

配置了托管身份验证
<base />
    <authentication-managed-identity resource="xxxx-xxx-4xxb-xxx-xxxxxxx" output-token-variable-name="msi-access-token" ignore-error="false" />
    <set-header name="Authorization" exists-action="override">
        <value>@("Bearer " + (string)context.Variables["msi-access-token"])</value>
    </set-header>

在这两种情况下,跟踪都显示令牌与标头一起传递,并且结果成功。但是,我不确定标头中的“x-functions-key”是否使其起作用。我尝试使用策略删除它,但它仍然存在。如果我从函数应用程序中删除它,则会出现 401 未经授权的错误。

我们如何确认哪一个正在使其正常工作?我们可以从标题中删除“x-functions-key”还是它是一个强制值?

azure-functions authorization azure-api-management
1个回答
0
投票

但是,我不确定标题中的“x-functions-key”是否使它起作用

是的,实际上,如果您的函数是使用授权级别 FunctionsAdmin 创建的,那么实际上 x-functions-key 可以帮助该函数正常工作。但是,如果您使用 Anonymous 授权级别创建函数,则在访问该函数时无需传递 x-functions-key

我们如何确认哪一个正在使其正常工作?

您可以验证该功能,而无需在策略中添加

get-authorization-context
,它会给您预期的结果。因此,x-functions-key 正在使该功能正常工作,而 get-authorization-context 正在为您的 API 添加额外的安全级别。

我们可以从标题中删除“x-functions-key”还是它是一个强制值?

AFAIK,您无法删除 x-functions-key,因为它会自动添加到后端。我尝试在后端策略中添加

<set-header name="x-functions-key" exists-action="delete" />
但它不允许我添加。

最后,我从函数应用程序中删除了它并测试了我的函数,一个具有Anonymous身份验证,另一个具有Function身份验证。

结果: 匿名认证功能-

enter image description here

功能认证功能-

enter image description here

因此,x-functions-key 使功能在 FunctionAdmin 身份验证级别功能的情况下工作。

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