我一直在工作,试图弄清楚如何将Azure函数连接到任何用户Office 365 Graph以查询其收件箱而没有任何成功。我需要帮助理解正确的方法来执行以下操作:
当用户向HTTP获取请求到HTTP触发功能时,应:
- 提示用户登录其Microsoft Work帐户。
- 请求访问其收件箱的许可。
- 查询他们的收件箱以获取未读消息的数量。
- 回复未读消息的计数。
这应该适用于调用该功能的任何用户,无论他们访问哪个Azure Active Directory实例。
这是可能的吗?
如果是这样,任何人都可以解释如何配置Azure函数以实现此目标吗?
谢谢斯图尔特
我已经弄清楚了如何做到这一点。提出的解决方案只是从Microsoft图而不是收件箱计数返回用户的详细信息。
- 创建功能和应用程序。
- 创建一个新的Azure函数应用程序。
- 添加一个JavaScript Web挂钩。
- 在此处创建Microsoft应用程序注册。
- 在应用程序注册中生成新密码并保存密码。
- 生成一个Web平台,并将重定向URL设置为https://.azurewebsites.net/.auth/login/aad/callback。
- 添加任何必要的委派权限(mail.read(。
- Azure函数应用程序设置Azure App Service身份验证。
- 打开Azure函数应用程序的身份验证(平台功能 ->身份验证/授权(。
- 设置"在请求未经身份验证时要采取的动作"以"使用Azure Active Directory登录"。
- 将Active Directory身份验证设置设置为"高级"。
- 将客户端ID设置为步骤3中创建的应用ID。
- 将客户端设置为步骤4中生成的密码。
- 离开发行人URL并允许令牌观众空白。
- 将Azure函数授权级别设置为匿名(单击函数 -> Integrate(。
-
将以下代码添加到您的功能:
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(); }); }); };
-
将"请求" NPM软件包添加到您的解决方案中。
- 转到https://yourfunctionname.scm.azurewebsites.net/dev/wwwroot/
- 在wwwroot文件夹中添加一个软件包。
- 将以下内容添加到您的软件包。JSON:
{ "名称":" yourfunctionname", "版本":" 0.0.1", "依赖关系":{ "请求":"> = 2.81.0" }}
- 使用控制台(从底部左第二个按钮(并运行:
npm安装
-
测试您的功能。
- 导航到您的功能。
- 应该提示您登录。
- 使用任何租户的任何Active Directory帐户。
- 还应提示您提供您的同意。
- 之后,您应该看到有关响应中提供的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 字段..