Dies ist, was ich tue.Zugriff auf Kalender in Office 365 mit Arbeitskonto
Ich möchte eine Anwendung entwickeln, die Zugriff auf und Verwaltung von Kalendern in Office 365 Mandant mit Microsoft Graph API über Microsoft Azure haben kann. Das Unternehmen verfügt über das Office 365 Business mit 10 Benutzern und Zugriff auf Azure Active Directory. Ich benutze Python 3.5 und Anfragen Bibliothek, um den Berechtigungscode Grant Flow zu gestalten.
Ich habe meine Anwendung in Windows Azure Active Directory registriert und dieser Anwendung alle erforderlichen Zugriffsberechtigungen sowie die Antwort-URL bereitgestellt. Der geheime Schlüssel des Clients wurde ebenfalls ausgegeben.
Ich lese den folgenden Link: https://graph.microsoft.io/en-us/docs/authorization/app_authorization
hier den Prozess i gefolgt:
Erstens die Autorization Code bekommen:
def triggerAutorization(request):
state = str(uuid4())
payload = {
"client_id": client_id,
"response_type": "code",
"state": state,
"redirect_uri": "http://localhost:8000/authorized",
"prompt": "consent"
}
url = "https://login.microsoftonline.com/{tenant}/oauth2/authorize?" + urllib.parse.urlencode(payload)
return HttpResponseRedirect(url)
Zweitens das Token
bekommendef requestToken(request):
headers = { 'Content-Type' : "application/x-www-form-urlencoded"}
post_data = {
"client_id": client_id,
"client_secret": client_secret,
"code" : request.session['code'],
"redirect_uri" : "http://localhost:8000/authorized",
"grant_type": "authorization_code",
"resource": "https://graph.microsoft.com/"
}
raw_response = requests.post("https://login.microsoftonline.com/{tenant}/oauth2/token?", data=post_data, headers= headers)
json_response = raw_response.json()
if json_response['access_token']:
request.session['access_token'] = json_response['access_token']
return HttpResponseRedirect('/createquote')
Drittens, alles, was es in Ordnung ist, ich mit den Rechten für den Zugriff Kalender Token entlang einen Zugang bekam (nehme ich an):
'scope': 'Calendars.Read Calendars.Read.All Calendars.Read.Shared Calendars.ReadWrite Calendars.ReadWrite.All Contacts.Read.Shared Directory.AccessAsUser.All Directory.Read.All Files.Read Files.Read.All Files.Read.Selected Files.ReadWrite Files.ReadWrite.All Mail.Read Mail.ReadWrite.All Mail.Send Mail.Send.All openid profile User.Read User.Read.All User.ReadBasic.All',
'expires_on': '1485932306',
'refresh_token': 'AQAB..',
'resource': 'https://graph.microsoft.com/',
'token_type': 'Bearer',
'expires_in': '3600',
'ext_expires_in': '0',
'not_before': '1485928406',
'access_token': 'eyJ0...',
'id_token': 'eyJ0...'
Viertens kommt das Problem hier, wenn ich versuche, den API-Aufruf zu machen, weil die Antwort ein 500-Server-Fehler ist, ohne sinnvolle Details.
def getCalendarList(request):
token = request.session['access_token']
headers = {
'User-Agent' : 'pythoncontacts/1.2',
'Authorization' : 'bearer {0}' . format(token),
'Content-Type' :"application/json;odata.metadata=minimal;odata.streaming=true"
}
request_id = str(uuid.uuid4())
instrumentation = { 'client-request-id' : request_id,
'return-client-request-id' : 'true' }
headers.update(instrumentation)
raw_response = requests.get("https://graph.microsoft.com/v1.0/me/calendars", headers = headers)
json_response = raw_response.json()
return HttpResponse(" %s" %str(json_response))
Das Komische ist, dass, wenn ich den API-Aufruf mit „https://graph.microsoft.com/v1.0/me/“ ändern funktioniert.
Community, ich hoffe, Sie können mir helfen. Ich habe jede Menge Dokumentation gelesen und verschiedene Ansätze ausprobiert, aber ich konnte das nicht zum Laufen bringen.
Vielen Dank ist Fortschritt.
Vielen Dank für Ihre Aufmerksamkeit.
Können Sie bestätigen, dass Sie den Standardkalender für diesen Benutzer unter https://outlook.offffice365.com sehen können? Aus Ihrer Beschreibung geht auch nicht hervor, ob Sie eine Business-Lizenz besitzen oder Exchange Online verwenden. –
Danke Marc LaFleur. !! :-) –