1

我試圖從Office365電子郵件加載數據而無需用戶交互。我創建了Azure應用程序,並擁有客戶端ID和客戶端密鑰。 我也有用戶信息(電子郵件+密碼)。沒有登錄重定向的Office365身份驗證

我需要調用Office365 API從郵箱下載郵件。但我需要應用程序在後臺下載它們而無需用戶交互(重定向到MS/Office365登錄頁面)以進行身份​​驗證/登錄到郵箱。

有沒有什麼辦法如何做到這一點只能通過Office API,而不需要重定向?

感謝您的任何信息。

+2

是的,你可以做通ADAL lib和UserCredential工作流程,但是您需要更具體地說明您嘗試了什麼以及您的代碼是否存在問題 –

回答

1

是的,您可以使用客戶端證書流程來創建守護程序服務應用程序來驗證應用程序。

下面是一個代碼示例使用Microsoft圖表SDK這個流程來檢索郵件:

string clientId = ""; 
string clientsecret = ""; 
string tenant = ""; 
string resourceURL = "https://graph.microsoft.com"; 
string authority = "https://login.microsoftonline.com/" + tenant + "/oauth2/token"; 
string userMail = "[email protected]"; 

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 AD門戶應用程序,並授予應用Mail.Read範圍如下面的圖: enter image description here

參考here更多的細節有關調用Microsoft圖在服務或守護程序

+0

謝謝,您是對的。通過該代碼和clientId,clientSecret和tenantId數據,我可以驗證我的Office365應用程序。但是,如果我允許「讀取所有郵箱中的郵件」權限,但我不確定是否可以訪問任何郵件(這是巨大的安全風險)?我需要這樣的東西:「閱讀這些郵箱:...」。無論如何感謝您的解決方案,你真棒:) – Mastenka

+0

沒有必要限制應用程序訪問特定的郵件,因爲你**客戶端的應用程序**應該有信心。您可以在應用程序中只需發佈該服務。我也解釋它[這裏](http://stackoverflow.com/questions/38397981/restrict-office365-app-read-mail-in-all-mailboxes-permission-to-specific-mailb) –