我花了一段时间试图弄清楚如何将 azure 函数连接到任何用户的 Office 365 图表以查询他们的收件箱,但没有成功。我需要帮助了解执行以下操作的正确方法:
当用户向 http 触发函数发出 http get 请求时,它应该:
- 提示用户登录其 Microsoft 工作帐户。
- 请求访问其收件箱的权限。
- 查询收件箱以获取未读消息的计数。
- 回复未读消息数。
这应该适用于调用该函数的任何用户,无论他们正在访问哪个 Azure Active Directory 实例。
这可能吗?
如果是这样,谁能解释一下如何配置azure功能来实现这一点?
谢谢, 斯图尔特
最佳答案
我已经想出了如何做到这一点。建议的解决方案仅从 Microsoft Graph 返回用户的详细信息,而不是收件箱计数。
- 创建函数和应用程序。
- 创建一个新的 Azure Functions 应用。
- 添加 JavaScript Web Hook 。
- 创建 Microsoft 应用程序注册 here 。
- 在应用程序注册中生成新密码并保存该密码。
- 生成 Web 平台并将重定向网址设置为 https://.azurewebsites.net/.auth/login/aad/callback。
- 添加任何所需的委派权限 (Mail.Read)。
- 为 Azure Function 应用设置 Azure 应用服务身份验证。
- 为 Azure Function 应用启用身份验证(平台功能 -> 身份验证/授权)。
- 将“请求未经身份验证时采取的操作”设置为“使用 Azure Active Directory 登录”。
- 将 Active Directory 身份验证设置设为“高级”。
- 将客户端 ID 设置为第 3 步中创建的应用程序 ID。
- 将客户端 key 设置为第 4 步中生成的密码。
- 将颁发者网址和允许的 token 受众留空。
- 将 Azure 函数授权级别设置为匿名(单击“函数”->“集成”)。
将以下代码添加到您的函数中:
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(); }); }); };
将“request”npm 包添加到您的解决方案中。
- 转到https://yourfunctionname.scm.azurewebsites.net/dev/wwwroot/
- 将 package.json 文件添加到 wwwroot 文件夹并添加请求的依赖项。
- 将以下内容添加到您的 package.json 中:
{ "name": "你的函数名称", “版本”:“0.0.1”, “依赖项”:{ “请求”:“>=2.81.0” } }
- 使用控制台(左侧倒数第二个按钮)并运行:
npm 安装
测试您的功能。
- 导航至您的函数。
- 系统应该提示您登录。</li>
- 使用任何租户的任何 Active Directory 帐户。
- 系统还应该提示您表示同意。
- 之后,您应该会从响应中提供的 Microsoft Graph 中看到有关您登录的用户的信息。
关于azure - 使用 Azure 应用服务身份验证将 Azure Function 作为 Multi-Tenancy 应用程序连接到 Microsoft Graph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44720343/