Azure Functions - 它可以与 Office 加载项一起使用吗?

Dut*_*Dan 5 ms-office azure office365 office-js

我确信有聪明的人可以让任何东西在 Azure 函数上运行,但是使用它来运行 Office 加载项有意义吗?我读到它非常适合运行小段代码,这就是我当前在 Azure 上作为 Web 应用程序运行的加载项。

Mic*_*oft 3

您不会使用 Azure Functions 来构建加载项,但您绝对可以将其与常规网站结合使用,以进行一些小型服务器端处理。

具体示例:对于我和同事构建的插件,我们需要获得用户的 GitHub 权限才能代表用户发布 Gists。GitHub 使用“授权代码授予类型”流程(请参阅https://developer.github.com/v3/oauth/),因此流程如下:

  1. 我们弹出一个对话框(使用最近在插件中引入的对话框 API)将用户引导至https://github.com/login/oauth/authorize,其中显示了一个漂亮的登录 UI。
  2. 如果用户登录并同意,GitHub 会将授权代码发送回给我们。该代码在客户端 JavaScript 中对我们没有什么好处,但如果我们将其传递给 Azure Function,我们可以将其交换为访问令牌。这必须在某些服务器端代码(即 Web 服务器或 Azure Functions,作为 Web 服务器的超轻量级形式)中完成,以便我们可以传入用于交换的客户端密钥 - 这很自然地不会在可嗅探的客户端 JavaScript 中不要保密。因此将该代码放在服务器上。

如果您想知道该代码是什么样的,请看这里:

var request = require('request');

module.exports = function (context, data) {
    context.log('code: ' + data.code);
    if ('code' in data) {
        request.post({
            url: 'https://github.com/login/oauth/access_token',
            json: {
                client_id: '################',
                client_secret: '################',
                redirect_uri: '################',
                code: data.code
            }
        }, function (err, httpResponse, body) {
            if (err) {
                context.log('error: ' + err);
                context.res = {
                    body: {
                        status: 500,
                        error: err
                    }
                }
            }
            else {
                context.res = { body: body };
            }

            context.done();
        });
    }
    else {
        context.res = {
            status: 400,
            body: { error: 'Please pass the GitHub code in the input object' }
        };

        context.done();
    }
}
Run Code Online (Sandbox Code Playgroud)