2017-02-01 3 views
0
nicht möglich

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

bekommen
def 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.

+0

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. –

+0

Danke Marc LaFleur. !! :-) –

Antwort

0

Ich habe nicht den ganzen Prozess in rohen getan, ich bin mir sicher, dass es einige oath2 Bibliotheken geben muss, um auf einer höheren Ebene zu arbeiten, ohne die Header selbst zu schreiben. Es gibt ein tolles Tutorial von einem MSFT-Typen jasonjoh, obwohl er Django verwendet. Wie speichern Sie die Token? Ich denke, sie sind mehr als 4k!

Hoffe das hilft

+0

Übrigens, vielleicht sollten Sie sich die v2-API ansehen [link] (https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-appmodel-v2- Überblick). – david

+0

Es klingt nicht so, als wäre dies ein Problem mit dem OAUTH/Token-Prozess. Sobald Sie den Graph-Endpunkt aufrufen, hat er sich bereits authentifiziert. Ich würde erwarten, ein HTTP 401 - Unauthorized zu sehen, wenn es das Token selbst wäre. –

1

Ich habe die Lösung gefunden. Es war zufällig mein Office 365-Plan. Benutzer, die mit der Edition "Office 365 Business" erstellt wurden, können Microsoft Graph nicht vollständig verwenden. Nach vielen Recherchen habe ich mich für eine Business Premium-Testversion angemeldet. Ich habe einen Benutzer unter diesem Plan erstellt und dann benutze ich diesen Account, um mich anzumelden und ich bekomme endlich seine Kalender. Außerdem habe ich den Prozess geändert, um die V2.0-Endpunkte zu verwenden.

Die lustige Sache ist, dass manchmal Microsoft-Dienste Fehler Antworten nicht die wahren Ursachen der Probleme erklären.

Für weitere Entwickler, die möglicherweise mit dem gleichen Problem zu tun haben, beachten Sie bitte die Geschäftspläne, die tatsächlich mit Microsoft Graph und Azure AD arbeiten.

Office 365 für mittelgroße Unternehmen (jetzt anrufen als Office 365 Business Premium) Office 365 Enterprise-E1, E3, E4, oder K1 Office 365 Education Office 365 Entwickler

Weitere Informationen, ist dies die URL:

https://msdn.microsoft.com/en-us/office/office365/howto/setup-development-environment#bk_Office365Account

ich würde gerne den Code schreiben, die für mich arbeiten. Endlich entschuldigen Sie bitte bitte Grammatik oder semantische Fehler.

Vielen Dank an die Gemeinde.

Verwandte Themen