Office365 如何在office 365 REST API V2.0服务中发送邮件而不提供;“以任何用户身份发送邮件”;许可?

Office365 如何在office 365 REST API V2.0服务中发送邮件而不提供;“以任何用户身份发送邮件”;许可?,office365,azure-active-directory,microsoft-graph-api,Office365,Azure Active Directory,Microsoft Graph Api,我已经创建了一个Azure广告应用程序,我想在守护程序服务中代表一些用户(有限列表)发送电子邮件。我使用Azure AD v2.0端点向Microsoft Office 365进行身份验证。当我向应用程序授予“以任何用户的身份发送邮件”权限并使用“{user}/sendmail”时,它可以正常工作。是否有任何方法可以在未授予此权限和用户交互的情况下以用户身份发送邮件?这个权限太宽了。如何将其限制为某些用户? 谢谢根据你的描述,我想你有两个问题 第一个问题,您想以用户身份发送邮件,而不需要用户交互

我已经创建了一个Azure广告应用程序,我想在守护程序服务中代表一些用户(有限列表)发送电子邮件。我使用Azure AD v2.0端点向Microsoft Office 365进行身份验证。当我向应用程序授予“以任何用户的身份发送邮件”权限并使用“{user}/sendmail”时,它可以正常工作。是否有任何方法可以在未授予此权限和用户交互的情况下以用户身份发送邮件?这个权限太宽了。如何将其限制为某些用户?
谢谢根据你的描述,我想你有两个问题

第一个问题,您想以用户身份发送邮件,而不需要用户交互

第二个问题,您希望将邮件的发件人限制为某些用户,而不是所有用户

关于你的问题#1,我们可以参考。作为对内容的描述,我们可以在没有用户的情况下访问

根据我的测试,我们可以尝试以下步骤:

步骤1,我们应获得管理员同意:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
                                           {
                                               ClientId = clientId,
                                               Authority = authority,
                                               RedirectUri = redirectUri,
                                               PostLogoutRedirectUri = redirectUri,
                                               Scope = "openid profile",
                                               ResponseType = "id_token",
                                               TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = false, NameClaimType = "name" },
                                               Notifications = new OpenIdConnectAuthenticationNotifications
                                                               {
                                                                   AuthenticationFailed = this.OnAuthenticationFailedAsync,
                                                                   SecurityTokenValidated = this.OnSecurityTokenValidatedAsync
                                                               }
                                           });

ConfidentialClientApplication daemonClient = new ConfidentialClientApplication(Startup.clientId, string.Format(AuthorityFormat, tenantId), Startup.redirectUri,
                                                                                       new ClientCredential(Startup.clientSecret), null, appTokenCache.GetMsalCacheInstance());
AuthenticationResult authResult = await daemonClient.AcquireTokenForClientAsync(new[] { MSGraphScope });
我们可以参考

第二步,我们可以使用Graph API发送电子邮件

对于您的问题#2,我们可以设置一些电子邮件地址来发送电子邮件,例如“简单发送”-mail@outlook.com'. 然后我们可以使用用户API:
POST/users/{id | userPrincipalName}/sendMail
这样地:
POSThttps://graph.microsoft.com/v1.0/simple-send-mail@outlook.com/sendMail
。关于更多细节,我们可以参考。

有点晚了,但现在似乎有了答案。某些文档限制对某些组的访问。

此处的所有权限,您可以参考: