Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OAuth und die Office 365 API

OAuth und die Office 365 API

8436b3aedae568866022e999bb81d66c?s=128

Daniel Lindemann

March 10, 2015
Tweet

Transcript

  1. Gold-Partner: Veranstalter: OAuth und die Office 365 API Daniel Lindemann

    Senior SharePoint Developer | ITaCS GmbH @daniellindemann daniel.lindemann@itacs.de http://dlindemann.de
  2. None
  3. Mails lesen, Mails schreiben, Mails löschen, Kalendereinträge lesen, Kalendereinträge bearbeiten,

    Kalendereinträge löschen, … Mails lesen, Mails schreiben, Mails löschen, Kalendereinträge lesen, Kalendereinträge bearbeiten, Kalendereinträge löschen, … Oldschool Zugriff einer Anwendung
  4. Passwort wird an Drittanbieter herausgegeben Drittanbieter muss Passwörter speichern Drittanbieter

    Applikation hat Zugriff auf alle Daten Ändert der Benutzer sein Passwort hat der Drittanbieter keinen Zugriff mehr Probleme
  5. “Passwords are not confetti. Please stop throwing them around. (Especially

    if they’re not yours.)” Chris Messina – Mitbegründer OAuth-Protokoll
  6. Passwörter werden durch Tokens ersetzt Tokens sind verschlüsselte Zeichenketten, die

    Zugriff auf eine API gewähren Zugriff steuerbar Es lässt sich festlegen auf welchen Teil einer API zugegriffen wird Client und Resource Server müssen sich vertrauen Selbe Ticketausstellungs-Stelle (Issuer) Was ändert sich?
  7. Resource Owner Authorization Server Resource Server Client Rollen

  8. Applikation registrieren Client ID Client Secret

  9. Authorization Token Access Token Refresh Token Tokens

  10. Beschreiben welche Daten der Consumer abrufen darf Wird beim Anfordern

    des Authorization Tokens definiert Beispiel: https://myservice.de/oauth/2/authorize?client_id=123&response_type=code&scope =Profile.Read,News.Edit&redirect_uri=https%3A%2F%2Fmyservice.de%2Fapp_au thorized Scopes
  11. Authentifizierungsprozess

  12. Mails lesen, Mails schreiben, Mails löschen, Kalendereinträge lesen, Kalendereinträge bearbeiten,

    Kalendereinträge löschen, … Kalendereinträge lesen, Kalendereinträge bearbeiten, Kalendereinträge löschen Zugriff einer Anwendung mit OAuth
  13. None
  14. Ein Authorisierungsprozess für Office 365 Azure AD Graph, Exchange, SharePoint

    Apps für Mobile Geräte und Web Sites Admin und End-User Genehmigungen Sicheres Protokoll OAuth 2.0 Modular aufgebaute Zugriffsbereiche Langzeit Zugriff durch Refresh Tokens Azure AD OAuth in Office 365
  15. Voraussetzungen

  16. DEMO Manuelles Registrieren einer Office 365 App mit Kalender Zugriff

  17. 1. Zugriffsanfrage O365 Daten 4. App Redirect (mit Token) 8.

    Request mit Access Token 9. Daten von O365 2. Anfrage Authorization Token 3. Erhalt Authorization Token (signiert) 5. Anfrage für Access Token und Daten-Query 10. Daten an Client senden 7. Access Token 6. Refresh Token / Authorization Token Office 365 App OAuth Flow
  18. Office 365 implementiert OAuth genau wie in der Spezifikation beschrieben

    http://tools.ietf.org/html/rfc6749#page-24
  19. Einfache REST/OData Service APIs Verfügbar für SharePoint, Exchange, Azure AD

    EndPoints können über den Discovery-Dienst abgefragt werden Zugriff auf Dateien, Listen, Mails, Kalender, Benutzer und Gruppen Unterstützt Azure AD OAuth Office 365 API
  20. Berechtigungen Lesen, Lesen+Schreiben Enties, Actions Beispiele https://[tenant]-my.sharepoint.com/_api/v1.0/me/files https://[tenant]-my.sharepoint.com/_api/v1.0/me/files/getByPath(‘[folder]/[name]') Dateien Entity

    Actions File CRUD, Upload, Download, Kopieren, Verschieben Folder CRUD, Dateien auflisten Drive Eigenschaften auslesen
  21. Berechtigungen Lesen, Lesen+Schreiben, Versenden Enties, Actions Beispiele https://outlook.office365.com/api/v1.0/me/folders/inbox/messages https://outlook.office365.com/api/v1.0/me/messages/[message_id]/attachments Mail

    Entity Actions Folder CRUD, Copy, Move Message CRUD, Copy, Move, Reply, ReplyAll, Forward, Send, CreateReply, CreateReplyAll, CreateForward Attachment CRUD
  22. Berechtigungen Lesen, Lesen+Schreiben Enties, Actions Beispiele https://outlook.office365.com/api/v1.0/me/events https://outlook.office365.com/api/v1.0/me/calendars Kalender Entity

    Actions CalendarGroup Calendar Event CRUD, Zusage, Ablehnen, unverbindliche Zusage Attachments CRUD
  23. Berechtigungen Lesen, Lesen+Schreiben Enties, Actions Beispiele https://outlook.office365.com/api/v1.0/me/contactfolders(‘business contacts’) https://outlook.office365.com/api/v1.0/me/contacts Kontakte

    Entity Actions ContactFolder Contact CRUD
  24. Berechtigungen Lesen, Lesen+Schreiben Enties, Actions Beispiele https://graph.windows.net/[tenant]/users?api-version=1.5 https://graph.windows.net/[tenant]/groups?api-version=1.5 Benutzer und

    Gruppen Entity Actions User CRUD Groups CRUD
  25. HTTP-basiertes Protokoll für Datenzugriffe Ermöglicht CRUD-Operationen Entwickelt von Microsoft Beispiele

    OData Szenario URL 5 Nachrichten aus der Inbox https://outlook.office365.com/api/v1.0/me/folders/inbox/messages?$top=5 Nachrichten mit Anhang https://outlook.office365.com/api/v1.0/me/folders/inbox/messages?$filter=HasAttachments eq true Genaue Abfrage mit mehreren Optionen https://outlook.office365.com/api/v1.0/me/messages/?$filter=Importance eq High&$select=Subject,Sender,DateTimeReceived&$orderby=DateTimeReceived desc&$top=5
  26. Office 365 Auth/Login-Seite zeigt kurze und gute Fehlermeldungen an Office

    365 API wirft meistens nur Exceptions Allheilmittel Fiddler Debugging
  27. Office 365 DEV Tenant erstellen https://portal.office.com/Signup/MainSignup15.aspx?OfferId=6881A1CB-F4EB-4db3- 9F18-388898DAF510&DL=DEVELOPERPACK Starter Project von

    GitHub klonen https://github.com/OfficeDev/O365-ASPNETMVC-Start.git Web.config anpassen <add key="ida:TenantID" value="ENTER_YOUR_TENANT_ID_HERE"/> Connected Service für Office 365 hinzufügen Getting started
  28. DEMO Setup Starter Project

  29. eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQi OiJodHRwczovL291dGxvb2sub2ZmaWNlMzY1LmNvbS8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8zZ WVmODkxMC0wMzMyLTRmZWItOTQzNi04YzQ1NzlkMjY5NmQvIiwiaWF0IjoxNDI1ODk2NDc4LCJuYmYiOjE0MjU4 OTY0NzgsImV4cCI6MTQyNTkwMDM3OCwidmVyIjoiMS4wIiwidGlkIjoiM2VlZjg5MTAtMDMzMi00ZmViLTk0MzYtO GM0NTc5ZDI2OTZkIiwiYW1yIjpbInB3ZCJdLCJvaWQiOiI0YTU1MTg5My1hZGY1LTRjMzAtODZlNS1iMzRiNjRhYmNmN WEiLCJ1cG4iOiJkYW5pZWxAZGxpbmRlbWFubi5kZSIsInB1aWQiOiIxMDAzMDAwMDgwRkQxREIyIiwic3ViIjoiMHVz UmxKUU9HeTRnQXFOdFJnX1ZCQ0ZRbU9hM2NzN1VCbklIa0xqejgzayIsImdpdmVuX25hbWUiOiJEYW5pZWwiLCJ mYW1pbHlfbmFtZSI6IkxpbmRlbWFubiIsIm5hbWUiOiJEYW5pZWwgTGluZGVtYW5uIiwidW5pcXVlX25hbWUiOiJkY W5pZWxAZGxpbmRlbWFubi5kZSIsImFwcGlkIjoiZjgwY2UwNzctYmU2Yy00Zjc5LWE3YTUtZDQ0ZmU3NGY4N2RjIi wiYXBwaWRhY3IiOiIxIiwic2NwIjoiQ2FsZW5kYXJzLlJlYWQgQ2FsZW5kYXJzLldyaXRlIENvbnRhY3RzLlJlYWQgQ29ud

    GFjdHMuV3JpdGUgZnVsbF9hY2Nlc3NfYXNfdXNlciBNYWlsLlJlYWQgTWFpbC5TZW5kIE1haWwuV3JpdGUiLCJhY3I iOiIxIn0.YcW-fIeNHOh9pGz- e1TKr7iVwZg1t6UKGeiPYKnKMgaeW_xhSAz9XepG2QnTAlYNfDmq1mkjweO8ScdRIYN2aepKoX7TBVDMgN8DBPPx smMnhH0E8BPf8kYbB1v8LIt1XgQaY_qpLqlAeSdhnc2BKR3bAZdlvb2RoxC5GZLp4X3HJIcLOM- MTkEFAg8L__hnuvMfW7rdcKV277kxL1uMiSQBkQ07UUl4UArE2HCYH5KEY- txEEgurHJj7TkY5ly_cHk1CxYf2aU3JhjEfVwh-BV- bdUkPQmuaf3BRo59KYgeVIMn0bOc7Avzefzx_SYiHqc9ThiTYglMLdRvpqf1mQ Access Token dekodieren
  30. { typ: "JWT", alg: "RS256", x5t: "MnC_VZcATfM5pOYiJHMba9goEKY" }. { aud:

    "https://outlook.office365.com/", iss: "https://sts.windows.net/3eef8910-0332-4feb-9436-8c4579d2696d/", iat: 1425896478, nbf: 1425896478, exp: 1425900378, ver: "1.0", tid: "3eef8910-0332-4feb-9436-8c4579d2696d", amr: ["pwd"], oid: "4a551893-adf5-4c30-86e5-b34b64abcf5a", upn: "daniel@dlindemann.de", puid: "1003000080FD1DB2", sub: "0usRlJQOGy4gAqNtRg_VBCFQmOa3cs7UBnIHkLjz83k", given_name: "Daniel", family_name: "Lindemann", name: "Daniel Lindemann", unique_name: "daniel@dlindemann.de", appid: "f80ce077-be6c-4f79-a7a5-d44fe74f87dc", appidacr: "1", scp: "Calendars.Read Calendars.Write Contacts.Read Contacts.Write full_access_as_user Mail.Read Mail.Send Mail.Write", acr: "1" } Audience aud: "https://outlook.office365.com/", Issuer iss: "https://sts.windows.net/3eef8910-0332-4feb-9436-8c4579d2696d/", Not Before nbf: 1425896478, Expires exp: 1425900378, Tenant ID tid: "3eef8910-0332-4feb-9436-8c4579d2696d", App ID appid: "f80ce077-be6c-4f79-a7a5-d44fe74f87dc", Scopes scp: "Calendars.Read Calendars.Write Contacts.Read Contacts.Write full_access_as_user Mail.Read Mail.Send Mail.Write", Access Token dekodieren
  31. { typ: "JWT", alg: "RS256", x5t: "MnC_VZcATfM5pOYiJHMba9goEKY" }. { aud:

    "https://outlook.office365.com/", iss: "https://sts.windows.net/3eef8910-0332-4feb-9436-8c4579d2696d/", iat: 1425896478, nbf: 1425896478, exp: 1425900378, ver: "1.0", tid: "3eef8910-0332-4feb-9436-8c4579d2696d", amr: ["pwd"], oid: "4a551893-adf5-4c30-86e5-b34b64abcf5a", upn: "daniel@dlindemann.de", puid: "1003000080FD1DB2", sub: "0usRlJQOGy4gAqNtRg_VBCFQmOa3cs7UBnIHkLjz83k", given_name: "Daniel", family_name: "Lindemann", name: "Daniel Lindemann", unique_name: "daniel@dlindemann.de", appid: "f80ce077-be6c-4f79-a7a5-d44fe74f87dc", appidacr: "1", scp: "Calendars.Read Calendars.Write Contacts.Read Contacts.Write full_access_as_user Mail.Read Mail.Send Mail.Write", acr: "1" } UPN upn: "daniel@dlindemann.de", Unique Name unique_name: "daniel@dlindemann.de", given_name: "Daniel", Display Names family_name: "Lindemann", name: "Daniel Lindemann“, Access Token dekodieren
  32. Warum sollte ICH über OAuth Bescheid wissen? Fazit OAuth

  33. Man in the middle Replay Attack Übertragen von (Authentifizierungs-) Informationen

    im Klartext http://thehackernews.com/2014/07/facebook-sdk-vulnerability-puts.html OAuth Angriffsmöglichkeiten
  34. http://oauth.net/ http://hueniverse.com/oauth/ http://www.oreilly.de/catalog/97814493116 05/index.html Buch Getting Stated with OAuth 2.0

    OAuth Links
  35. Office DEV Center

  36. FRAGEN?

  37. Ich freue mich auf Ihr Feedback!

  38. Gold-Partner: Veranstalter: Vielen Dank! Daniel Lindemann @daniellindemann daniel.lindemann@itacs.de http://dlindemann.de