使用Azure App Service身份验证,将Azure函数连接到Microsoft Graph作为多租户应用程序



我一直在工作,试图弄清楚如何将Azure函数连接到任何用户Office 365 Graph以查询其收件箱而没有任何成功。我需要帮助理解正确的方法来执行以下操作:

当用户向HTTP获取请求到HTTP触发功能时,应:

  1. 提示用户登录其Microsoft Work帐户。
  2. 请求访问其收件箱的许可。
  3. 查询他们的收件箱以获取未读消息的数量。
  4. 回复未读消息的计数。

这应该适用于调用该功能的任何用户,无论他们访问哪个Azure Active Directory实例。

这是可能的吗?

如果是这样,任何人都可以解释如何配置Azure函数以实现此目标吗?

谢谢斯图尔特

我已经弄清楚了如何做到这一点。提出的解决方案只是从Microsoft图而不是收件箱计数返回用户的详细信息。

  1. 创建功能和应用程序。
    1. 创建一个新的Azure函数应用程序。
    2. 添加一个JavaScript Web挂钩。
  2. 在此处创建Microsoft应用程序注册。
    1. 在应用程序注册中生成新密码并保存密码。
    2. 生成一个Web平台,并将重定向URL设置为https://.azurewebsites.net/.auth/login/aad/callback。
    3. 添加任何必要的委派权限(mail.read(。
  3. Azure函数应用程序设置Azure App Service身份验证。
    1. 打开Azure函数应用程序的身份验证(平台功能 ->身份验证/授权(。
    2. 设置"在请求未经身份验证时要采取的动作"以"使用Azure Active Directory登录"。
    3. 将Active Directory身份验证设置设置为"高级"。
      1. 将客户端ID设置为步骤3中创建的应用ID。
      2. 将客户端设置为步骤4中生成的密码。
      3. 离开发行人URL并允许令牌观众空白。
  4. 将Azure函数授权级别设置为匿名(单击函数 -> Integrate(。
  5. 将以下代码添加到您的功能:

    var request = require('request');
    module.exports = function (context, req) {
        var parameters = {
            grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
            client_id: process.env.WEBSITE_AUTH_CLIENT_ID,
            client_secret: process.env.WEBSITE_AUTH_CLIENT_SECRET,
            assertion: req.headers['x-ms-token-aad-id-token'],
            resource: 'https://graph.microsoft.com',
            requested_token_use: 'on_behalf_of'
        };
        var tenant = req.headers['x-ms-client-principal-name'].replace(/.*@/, "");
        request.post('https://login.microsoftonline.com/'+tenant+'/oauth2/token', {form: parameters}, function (aadErr, aadResponse, aadMsg) {
            var msgJson = JSON.parse(aadMsg);
            request.get('https://graph.microsoft.com/v1.0/me/', {'auth': {'bearer': msgJson.access_token}}, function (err, response, msg) {
                context.res = {
                    body: msg
                };
                context.done();
            });
        });
    };
    
  6. 将"请求" NPM软件包添加到您的解决方案中。

    1. 转到https://yourfunctionname.scm.azurewebsites.net/dev/wwwroot/
    2. 在wwwroot文件夹中添加一个软件包。
    3. 将以下内容添加到您的软件包。JSON:

    { "名称":" yourfunctionname", "版本":" 0.0.1", "依赖关系":{ "请求":"> = 2.81.0" }}

    1. 使用控制台(从底部左第二个按钮(并运行:

    npm安装

  7. 测试您的功能。

    1. 导航到您的功能。
    2. 应该提示您登录。
    3. 使用任何租户的任何Active Directory帐户。
    4. 还应提示您提供您的同意。
    5. 之后,您应该看到有关响应中提供的Microsoft图的信息。

您应该能够在其他stackoverflow问题上找到所需的信息:从azure函数中调用Microsoft Graph API

至于如何注册AAD多租户应用程序,您可以在此处找到更多信息:https://blog.mastykarz.nl/configuring-multi-tenant-authent-authentication-autentication-azure-appice-app-service-appice-authentication-authentication-options/。主要技巧是转到高级选项卡并清除发行器URL 字段..

最新更新