如果没有单独的Id/密码,MS Graph可以访问邮箱吗?
我们的组织正在考虑使用MS图实现邮箱自动化。然而,有人表示担心,这将暴露所有邮箱电子邮件。
最坏的情况(即聪明的黑客只使用脚本):用mail编写脚本是否可以在没有单独的Id/密码的情况下访问邮箱?如果他们有一个没有授权的邮箱,那么最大的曝光是什么?
谢谢!
发布于 2022-10-17 06:29:52
对于Ms图形api,它提供了管理帐户/组/邮件帐户/事件/日历/.如果我们需要使用图形api,我们必须使用应用程序证书(基本上是client_secret)创建一个Azure应用程序。而Azure应用程序应该有足够的API权限,例如,我们给予User.ReadWrite.All权限,然后我们可以通过这个Azure应用程序使用图形api来管理这个租户中的用户。当我们添加权限Mail.ReadWrite时,我们可以管理电子邮件帐户。

对于api权限,有两种权限,一种用于delegate,另一种用于application。当我们给出委托api权限时,我们需要先用您自己的帐户(例如user1@xx.onmicrosoft.com,并且这个帐户拥有邮件许可证)登录,然后我们可以使用ms列出您帐户的所有邮件消息。
但是,当我们授予应用程序api权限时,我们不需要首先登录,我们可以直接调用图形api,并列出在租户中拥有邮件许可证的任何用户帐户的所有邮件消息。
让我们回到您的问题,如果脚本可以访问邮箱没有单独的Id/密码。我的回答是肯定的。但是我必须获得Azure AD应用程序&客户端机密,然后这个应用程序必须有足够的api权限,比如应用程序许可 for Mail.ReadWrite, Mail.Send,并且我需要知道您的电子邮件地址/帐户。当我得到所有这些信息,我可以访问邮箱。这是一个样本。
using Microsoft.Graph;
using Azure.Identity;
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenant_name.onmicrosoft.com";
var clientId = "aad_app_id";
var clientSecret = "client_secret";
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var messages = await graphClient.Users["{email_address/user_account/user_id}"].Messages
.Request()
.Select("sender,subject")
.GetAsync();https://stackoverflow.com/questions/74070921
复制相似问题