403

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

我在 Azure 中配置并运行了 Azure Durable Functions Orchestration 功能。

我还配置了一个 Azure API 管理服务来公开编排功能。

我可以通过 Azure API 管理服务成功调用编排函数,并获取接受的 202 和带有状态查询 GET URL 的 Location 标头以进行轮询,直到编排函数完成/失败等。

如果我直接将相关状态查询GET URL调用到azure函数:例如 https://some-ulr-to-the-function-app.azurewebsites.net/runtime/webhooks/durabletask/instances/cc970c6e2cb2426f99629c17cdd12345?code=q4NnjCbKTdBdH6712345dm4tnRRlYEAZ2tnZUliepmIKAzFuNUC0 MQ==

我收到了 200 响应以及预期的编排当前状态

如果我尝试通过 Azure API 管理服务公开此端点并尝试获取状态,我会收到 403 禁止响应。例如 https://some-ulr-to-apim-service.azure-api.net/runtime/webhooks/durabletask/instances/cc970c6e2cb2426f99629c17cdd12345?code=q4NnjCbKTdBdH6712345dm4tnRRlYEAZ2tnZULiepmIKAzFuNUC0MQ==

那么,/runtime/webhooks/durabletask/instances/cc970c6e2cb2426f99629c17cdd12345?code=q4NnjCbKTdBdH6712345dm4tnRRlYEAZ2tnZUliepmIKAzFuNUC0MQ==,端点可以通过Azure API管理服务公开吗? 如果是这样,我应该如何配置才能通过 Azure API 管理服务公开此端点?

我已尝试通过 Azure API 管理服务的托管标识直接访问底层存储帐户和表(其中保存此实例数据),但仍然收到 403 Forbidden 结果。

在 Application Insights 中,我可以看到 Azure API 管理服务已按预期将请求传递给函数应用程序,但结果为 403。

任何帮助将不胜感激

azure-functions azure-api-management http-status-code-403 azure-durable-functions
2个回答
1
投票

@in-pv 和我发现了问题的解决方案。

总结

如果通过 Azure API 管理服务查询持久函数的 statusQueryGetUri,请确保该 API 请求中引用的后端其授权凭证中未定义自定义标头

详情

为 Azure Function App 设置 API 管理服务后端时,Azure 将在后端的授权凭据中配置一个名为 x-functions-key 的标头。通过 API 管理服务与函数应用交互时需要此标头,其值应该是您的函数应用密钥。如果您排除此标头,则在尝试通过 API 管理服务调用您的 azure 函数时,您将收到 401 Unauthorized 错误。

如果在查询持久函数的statusQueryGetUri时包含此标头,持久函数将返回403错误。必须从 API 管理服务后端授权凭证中删除标头才能调用持久功能状态端点。


0
投票

这种情况有什么解决方案吗?如果我删除标题 x-function-key 它会给出 401。

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