使用 azure 函数处理来自 azure 逻辑应用程序的会议请求
Processing meeting requests from azure logic app with azure functions
经过数小时的研究,我完全感到困惑。围绕 azure 函数和 azure 逻辑应用程序以及围绕 azure ad 的图形和身份验证内容正在发生如此多的变化,因此真的很难找到合适的资源。
我想实现的很简单:
- 收到共享收件箱的新 E-Mail 时触发的 azure logic 应用程序。
- 如果这些 e-mails 是会议请求并且它们被标记为私人或以状态 'free' 发送,则会议请求应该被自动拒绝。
- 消息已发布到 Slack 频道。
预计第 2 步一切正常。不幸的是,没有默认连接器提供任何操作来阅读有关会议请求的更多详细信息,也没有连接器操作可以拒绝会议请求。所以显而易见的方法是使用 azure 函数并使用 Microsoft Graph API.
所以我总是失败的地方是:
如何在 Azure 函数中获取正确的 Auth 令牌以访问 Microsoft Graph?
由于逻辑应用程序是非交互式执行的,因此我无法进行任何交互式登录,并且我不想在代码中对任何凭据进行硬编码。
1.Open 函数应用中的 MSI
在您的函数应用程序中,导航至 Platform features
、select Identity
并将 Status
切换为 On
。单击 Save
。
2.Permissions 和托管服务身份的角色
授予服务主体权限以从我的 Azure AD 获取一些目录数据,例如用户信息。以下 Azure AD 命令将我的服务主体添加到 AD 目录角色 Directory Readers
:
3.Get 代币
因为您在 Azure 功能中打开了 MSI,您可以转到 https://***.scm.azurewebsites.net
并单击环境并获取 MSI_SECRET
public static async Task<HttpResponseMessage> GetToken(string resource, string apiversion) {
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
return await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource, apiversion));
}
经过数小时的研究,我完全感到困惑。围绕 azure 函数和 azure 逻辑应用程序以及围绕 azure ad 的图形和身份验证内容正在发生如此多的变化,因此真的很难找到合适的资源。
我想实现的很简单:
- 收到共享收件箱的新 E-Mail 时触发的 azure logic 应用程序。
- 如果这些 e-mails 是会议请求并且它们被标记为私人或以状态 'free' 发送,则会议请求应该被自动拒绝。
- 消息已发布到 Slack 频道。
预计第 2 步一切正常。不幸的是,没有默认连接器提供任何操作来阅读有关会议请求的更多详细信息,也没有连接器操作可以拒绝会议请求。所以显而易见的方法是使用 azure 函数并使用 Microsoft Graph API.
所以我总是失败的地方是: 如何在 Azure 函数中获取正确的 Auth 令牌以访问 Microsoft Graph?
由于逻辑应用程序是非交互式执行的,因此我无法进行任何交互式登录,并且我不想在代码中对任何凭据进行硬编码。
1.Open 函数应用中的 MSI
在您的函数应用程序中,导航至 Platform features
、select Identity
并将 Status
切换为 On
。单击 Save
。
2.Permissions 和托管服务身份的角色
授予服务主体权限以从我的 Azure AD 获取一些目录数据,例如用户信息。以下 Azure AD 命令将我的服务主体添加到 AD 目录角色 Directory Readers
:
3.Get 代币
因为您在 Azure 功能中打开了 MSI,您可以转到 https://***.scm.azurewebsites.net
并单击环境并获取 MSI_SECRET
public static async Task<HttpResponseMessage> GetToken(string resource, string apiversion) {
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
return await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource, apiversion));
}