Authentication 无登录重定向的Office365身份验证

Authentication 无登录重定向的Office365身份验证,authentication,office365,azure-active-directory,office365api,office365-apps,Authentication,Office365,Azure Active Directory,Office365api,Office365 Apps,我正在尝试从Office365电子邮件加载数据,无需用户交互。我已经创建了Azure应用程序,我有客户ID和客户机密。 我也有用户信息(电子邮件+密码) 我需要致电Office365 API从邮箱下载电子邮件。但我需要应用程序在后台下载它们,而无需用户交互(重定向到MS/Office365登录页面),以获得身份验证/登录到邮箱 有没有办法只通过Office API实现这一点,而不需要重定向 谢谢你提供的任何信息 是的,您可以使用客户端凭据流创建守护程序服务应用程序来验证该应用程序 以下是使用Mi

我正在尝试从Office365电子邮件加载数据,无需用户交互。我已经创建了Azure应用程序,我有客户ID和客户机密。 我也有用户信息(电子邮件+密码)

我需要致电Office365 API从邮箱下载电子邮件。但我需要应用程序在后台下载它们,而无需用户交互(重定向到MS/Office365登录页面),以获得身份验证/登录到邮箱

有没有办法只通过Office API实现这一点,而不需要重定向


谢谢你提供的任何信息

是的,您可以使用客户端凭据流创建守护程序服务应用程序来验证该应用程序

以下是使用Microsoft Graph SDK通过以下流程检索邮件的代码示例:

string clientId = "";
string clientsecret = "";
string tenant = "";
string resourceURL = "https://graph.microsoft.com";
string authority = "https://login.microsoftonline.com/" + tenant + "/oauth2/token";
string userMail = "user1@yourdomain.onmicrosoft.com";

var credential = new ClientCredential(clientId, clientsecret);
AuthenticationContext authContext =new AuthenticationContext(authority);
var authResult = await authContext.AcquireTokenAsync(resourceURL, credential);
var graphserviceClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
   (requestMessage) =>
   {
       requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", authResult.AccessToken);

       return Task.FromResult(0);
   }));

var items = await graphserviceClient.Users[userMail].Messages.Request().OrderBy("receivedDateTime desc").GetAsync();

foreach (var item in items)
{
        Console.WriteLine(item.Subject);
}
我们需要在Azure广告门户上注册该应用程序,并授予该应用程序邮件。请阅读范围,如下图所示:


有关在服务或守护程序应用程序中调用Microsoft Graph的更多详细信息,请参阅。

是的,您可以使用UserCredential工作流通过ADAL lib执行,但您需要更具体地说明您在代码中尝试了什么以及遇到了什么问题谢谢,您是对的。有了这些代码和clientId、clientSecret和tenantId数据,我就能够验证我的Office365应用程序了。但是,如果我允许我的应用程序具有“在所有邮箱中阅读邮件”权限,那么我就不是舒尔,如果这意味着我可以访问任何人的邮件(这是巨大的安全风险)?我需要像这样的东西:“读那些邮箱:…”。无论如何,谢谢你的解决方案,你真是太棒了:)没有必要限制应用程序访问特定邮件,因为你的应用程序客户端凭据应该是有信心的。您只需在应用程序中发布所需的服务即可。我也解释一下