2016-07-29 18 views
1

Ich versuche, eine (C#) Webanwendung zu erstellen, die es Clients ermöglicht, Termine mit mir zu vereinbaren. Ich möchte, dass die Webanwendung Einträge zu meinem Outlook-Kalender lesen und hinzufügen kann. Viele Benutzer verwenden die Web-App, aber die Web-App greift nur auf einen Outlook-Kalender zu - meinen. Alle Beispiele, die ich in Betrieb nehmen konnte, haben den Benutzer der Webanwendung interaktiv authentifiziert - aber meine Benutzer werden mein Passwort nicht kennen. Ich möchte meinen Benutzernamen/E-Mail-Adresse und Passwort in der Web-App fest codieren.Verwenden der Office Outlook-API mit hartem Code Benutzernamen und Kennwort

Wenn ein Token zu erwerben versucht, bekomme ich einen Fehler:

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException: 
AADSTS65001: The user or administrator has not consented to use the application. 
Send an interactive authorization request for this user and resource. 

Ich bin kein Administrator des Mieters. Gibt es eine Möglichkeit, dass ich dies ohne Administratoreinbindung erledigen kann? Möchten Sie eine Art von Zertifikat anstelle eines Benutzernamens und eines Passworts als Benutzeranmeldeinformationen verwenden?

Mein Code (zur Zeit in einer einfachen Konsolenanwendung C#) ist wie folgt:

UserCredential uc = new UserCredential(MyUsername, MyPassword); 
var AuthContext = new AuthenticationContext("https://login.windows.net/Common"); 

// this doesn't work unless an unexpired token already exists 
ar = AuthContext.AcquireToken("https://outlook.office365.com/", MyClientId, uc); 

// this does work, but requires the app user to know the password 
ar = AuthContext.AcquireToken("https://outlook.office365.com/", MyClientId, new Uri(MyReturnURI)); 

Antwort

2

Verwendung von Benutzername und Passwort So aktivieren Sie die Token direkt zu beantragen, müssen wir zustimmen, die App zu verwenden.

Wir können die OAuth 2.0-Autorisierungscode Zuschussfluss die Zustimmung des Benutzers gewähren. Hier ist ein Beispiel der ADAL Authentifizierungsbibliothek verwenden (3.13.1.846) den Delegierten Token zu erwerben:

static string authority= "https://login.microsoftonline.com/common"; 
public static string GetDeligateToken(string resource, string clientId,string redirectURL) 
    { 
     AuthenticationContext authContext = new AuthenticationContext(authority); 
     AuthenticationResult authResult= authContext.AcquireTokenAsync(resource, clientId,new Uri(redirectURL), new PlatformParameters(PromptBehavior.Auto)).Result; 
     return authResult.AccessToken; 
    } 

Nachdem wir die App einverstanden sind, jetzt können wir den Code in Ihrem Beitrag verwenden, um das Token zu erwerben.

+0

Sorry, ich verstehe nicht. Wenn ich den von Ihnen angegebenen Code verwende, wird er auf eine Webseite zur Anmeldung geschickt (und wenn ich meinen Benutzernamen und mein Passwort anschließe, wird ein Token zurückgegeben). Aber wann soll dieser Code ausgeführt werden und von wem? Die Web-App, die ich zu implementieren versuche, wird von anderen Benutzern verwendet, die meinen Benutzernamen und mein Passwort nicht kennen. Soll ich den von Ihnen bereitgestellten Code im Voraus ausführen, das Token abrufen und es als Zeichenfolge in meiner Web-App fest codieren? Ich dachte, diese Token würden nach etwa einer Stunde ablaufen? – Wayne

+0

Nachdem Sie den Code in der Post ausgeführt haben, melden Sie sich auf der Seite mit dem Konto an, das Sie in Ihrem ursprünglichen Post verwenden möchten. Dann könnten Sie eine Zustimmungsseite sehen, und nachdem Sie das Zugriffstoken erhalten haben, sollte das Problem in Ihrem ursprünglichen Beitrag behoben sein (Sie haben bereits zugestimmt, ** die Anwendung zu verwenden). –

+0

Danke, das scheint zu funktionieren. Also diese Zustimmung dauert ewig? – Wayne