Ich versuche, einen Bot zu erstellen, der Besprechungen buchen kann. Um dies zu tun, muss ich auf den Kalender eines Mitarbeiters zugreifen, um FreeBusy-Informationen zu erhalten, um letztendlich ein Meeting zu buchen. Ich versuche, die E-Mail und das Kennwort nicht hart zu codieren, und dafür möchte ich ein Zugriffstoken von Azure AD verwenden, um EWS aufzurufen. stelle ich die Eigenschaften fürEWS Oauth Ausnahme: Die Anfrage ist fehlgeschlagen. Der Remote-Server hat einen Fehler zurückgegeben: (401) Nicht autorisiert
public static ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
dieser Methode:
public static async System.Threading.Tasks.Task UseExchangeService(IDialogContext context, string userEmailAddress, SecureString userPassword)
{
string authority = ConfigurationManager.AppSettings["authority"];
string clientID = ConfigurationManager.AppSettings["clientID"];
string resource = ConfigurationManager.AppSettings["resource"];
string appKey = ConfigurationManager.AppSettings["appkey"];
AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);
ClientCredential clientCred = new ClientCredential(clientID, appKey);
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(resource, clientCred);
service.Url = new Uri(ConfigurationManager.AppSettings["serverName"] + "/ews/exchange.asmx");
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.Credentials = new OAuthCredentials(authenticationResult.AccessToken);
// USING THIS LINE IT WORKS FINE!
// service.Credentials = new NetworkCredential(userEmailAddress, userPassword); // VIRKER
}
ich tun, um die Zugriffstoken von Azure AD und ich habe die Erlaubnis für die Anwendung in Azure AD gewährt.
Ich benutze diese Methode die freebusytimes zu extrahieren, enthält es andere mehr Code, um die Zeiten als Tasten auf einem herocard angezeigt werden, aber dies ist der Aufruf von EWS:
List<AttendeeInfo> attendees = new List<AttendeeInfo>();
attendees.Add(new AttendeeInfo()
{
SmtpAddress = "MyEMAIL",
AttendeeType = MeetingAttendeeType.Organizer
});
attendees.Add(new AttendeeInfo()
{
SmtpAddress = BookersEmail,
AttendeeType = MeetingAttendeeType.Required
});
//DateTime date1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day.Ad, 7, 0, 0)
// Specify options to request free/busy information and suggested meeting times.
AvailabilityOptions availabilityOptions = new AvailabilityOptions();
availabilityOptions.GoodSuggestionThreshold = 49;
availabilityOptions.MaximumNonWorkHoursSuggestionsPerDay = 0;
availabilityOptions.MaximumSuggestionsPerDay = 20;
// Note that 60 minutes is the default value for MeetingDuration, but setting it explicitly for demonstration purposes.
availabilityOptions.MeetingDuration = 60;
availabilityOptions.MinimumSuggestionQuality = SuggestionQuality.Excellent;
//TimeWindow hej = new TimeWindow();
DateTime StartDay = DateTime.Now.AddDays(1);
TimeSpan ts = new TimeSpan(9, 0, 0);
DateTime StartTime = StartDay.Date + ts;
availabilityOptions.DetailedSuggestionsWindow = new TimeWindow(StartTime, DateTime.Now.AddDays(4));
availabilityOptions.RequestedFreeBusyView = FreeBusyViewType.FreeBusy;
// Return free/busy information and a set of suggested meeting times.
// This method results in a GetUserAvailabilityRequest call to EWS.
GetUserAvailabilityResults results = service.GetUserAvailability(attendees,
availabilityOptions.DetailedSuggestionsWindow,
AvailabilityData.FreeBusyAndSuggestions,
availabilityOptions);
ich die Anwendung in Azure erstellt haben AD und ich habe die folgenden Berechtigungen erteilt: Office 365 Exchange Online:
Verwenden Exchange Web Services mit vollem Zugriff auf alle Postfächer
lesen und schreiben von Kalendern in allen Briefkästen
lesen und schreiben Benutzer und gemeinsame Kalender
Zugang Briefkästen als die angemeldeten Nutzer über Exchange Web Services
ich andere Antworten versucht habe ich auf Stackoverflow gefunden, aber sie tun nicht den Trick für mich. Hoffnung, die Sie helfen können
Können Sie Ihren Beitrag mit einer Frage bearbeiten. Ich bin mir nicht sicher, was du fragst. –