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

时间:2017-01-15 09:56:41

标签: azure ms-office office365 office-js

我确信有聪明的人可以在Azure功能上运行任何东西,但是使用它来运行Office加载项是否有意义呢?我认为这是运行小段代码的理想选择,而这正是我目前在Azure上作为Web应用程序运行的加载项。

1 个答案:

答案 0 :(得分:2)

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

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

  1. 我们弹出一个对话框(使用最近在插件中引入的Dialog API)将用户定向到https://github.com/login/oauth/authorize,这显示了一个漂亮的登录用户界面。
  2. 如果用户登录并同意,GitHub会将授权码发回给我们。在客户端JavaScript中,代码对我们没什么用,但是如果我们将它传递给Azure函数,我们可以将它交换为访问令牌。这必须在一些服务器端代码(即Web服务器或Azure功能,作为Web服务器的超轻量级形式)中完成,以便我们可以传递客户端密钥进行交换 - 这自然不会在可以嗅探的客户端JavaScript中保密。因此将该代码放在服务器上。
  3. 如果您想知道代码是什么样的,那么它就是:

    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();
        }
    }