1

我正在尝试通过 Office 脚本(获取)对我创建的公开可用的基于 Azure 函数的 API 进行 API 调用。根据政策,我们需要为 Azure Functions 启用 CORS。我已经尝试了所有我能想到的域,但除非我允许所有来源,否则我无法接到工作电话。我试过了:

第一个是我试图从中执行的 Excel Online 域,其余的是在 Chrome 的“网络”选项卡中运行的脚本期间出现的。office Scripts 中的错误消息并没有像 Chrome 控制台那样告诉我请求来自哪个域。我需要什么主机才能让 Office 脚本能够调用我的 API?

4

1 回答 1

2

预期的 CORS 设置为:https://*.officescripts.microsoftusercontent.com.

但是,Azure Functions CORS 目前不支持通配符子域。如果您尝试使用通配符子域设置来源,您将收到以下错误:

Azure Functions CORS 不支持通配符子域

一种可能的解决方法是在 Azure Functions 代码中显式维护“允许列表”。这是一个概念验证实现(假设您将 node.js 用于您的 Azure Functions):

module.exports = async function (context, req) {

    // List your allowed hosts here. Escape special characters for the regular expressions.
    const allowedHosts = [
        /https\:\/\/www\.myserver\.com/,
        /https\:\/\/[^\.]+\.officescripts\.microsoftusercontent\.com/
    ];

    if (!allowedHosts.some(host => host.test(req.headers.origin))) {
        context.res = {
            status: 403, /* Forbidden */
            body: "Not allowed!"
        };
        return;
    }

    // Handle the normal request and generate the expected response.

    context.res = {
        status: 200,
        body: "Allowed!"
    };
}

请注意:

  • 需要正则表达式来匹配动态子域。
  • 为了在代码中进行来源检查,您需要在函数 CORS 设置页面上进行设置*Allowed Origins

或者,如果您想使用 ASP.NET Core 构建您的服务,您可以执行以下操作:https ://stackoverflow.com/a/49943569/6656547 。

于 2021-11-01T23:38:11.963 回答