1

Ich versuche, Daten aus Office365-E-Mail ohne Benutzerinteraktion zu laden. Ich habe Azure App erstellt und ich habe Client-ID und Client geheim. Ich habe auch Benutzerinformationen (E-Mail + Passwort).Office365-Authentifizierung ohne Login-Umleitung

Ich muss Office365-API aufrufen, um E-Mails aus dem Postfach herunterzuladen. Aber ich brauche eine Anwendung, um sie im Hintergrund ohne Benutzerinteraktion herunterzuladen (um zur MS/Office365 Login-Seite umzuleiten), um authentifiziert/in Mailbox eingeloggt zu werden.

Gibt es eine Möglichkeit, wie dies nur über Office-API ohne Umleitung getan werden kann?

Danke für jede Info.

+2

Ja, können Sie durch ADAL tun lib mit UserCredential Workflow, aber Sie müssen genauer sein, was Sie versucht haben und das Problem, das Sie mit Ihrem Code haben –

Antwort

1

Ja, Sie können eine Daemon-Service-App mit dem Client Credential-Fluss erstellen, um die App zu authentifizieren.

Hier ist ein Codebeispiel die E-Mails unter Verwendung von Microsoft Graph SDK mit diesem Fluss abzurufen:

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); 
} 

Und wir brauchen die App auf der Azure AD-Portal registrieren und die App Mail.Read Umfang gewähren wie Abbildung unten: enter image description here

zu here weitere Einzelheiten finden Sie über Aufrufen von Microsoft Graph in einem Dienst oder Daemon App

+0

Vielen Dank, Sie haben Recht. Mit diesem Code und clientId, clientSecret und mandatorId konnte ich meine Office365 App authentifizieren. Ich bin jedoch nicht sicher, ob ich die Berechtigung "Mail in allen Mailboxen lesen" für meine App erlauben darf, wenn ich dann auf alle Mails zugreifen kann (was ein großes Sicherheitsrisiko darstellt)? Ich brauche etwas wie: "Lesen Sie diese Postfächer: ...". Wie auch immer, danke für Ihre Lösung, Sie sind genial wie Hölle :) – Mastenka

+0

Es gibt keine Notwendigkeit, die App auf bestimmte Mails zu beschränken, weil die App Sie ** Client-Credential ** sollte zuversichtlich sein. Sie können den Dienst einfach in Ihrer App veröffentlichen. Ich erkläre es auch [hier] (http://stackoverflow.com/questions/38397981/restrict-office365-app-read-mail-in-all-mailboxes-permission-to-specific-mailb) –