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

OAuth und die Office 365 API

OAuth und die Office 365 API

Daniel Lindemann

March 10, 2015
Tweet

More Decks by Daniel Lindemann

Other Decks in Technology

Transcript

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

    Senior SharePoint Developer | ITaCS GmbH @daniellindemann [email protected] http://dlindemann.de
  2. 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
  3. 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
  4. “Passwords are not confetti. Please stop throwing them around. (Especially

    if they’re not yours.)” Chris Messina – Mitbegründer OAuth-Protokoll
  5. 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?
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. Office 365 Auth/Login-Seite zeigt kurze und gute Fehlermeldungen an Office

    365 API wirft meistens nur Exceptions Allheilmittel Fiddler Debugging
  14. 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
  15. { 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: "[email protected]", puid: "1003000080FD1DB2", sub: "0usRlJQOGy4gAqNtRg_VBCFQmOa3cs7UBnIHkLjz83k", given_name: "Daniel", family_name: "Lindemann", name: "Daniel Lindemann", unique_name: "[email protected]", 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
  16. { 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: "[email protected]", puid: "1003000080FD1DB2", sub: "0usRlJQOGy4gAqNtRg_VBCFQmOa3cs7UBnIHkLjz83k", given_name: "Daniel", family_name: "Lindemann", name: "Daniel Lindemann", unique_name: "[email protected]", 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: "[email protected]", Unique Name unique_name: "[email protected]", given_name: "Daniel", Display Names family_name: "Lindemann", name: "Daniel Lindemann“, Access Token dekodieren
  17. 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