Slide 1

Slide 1 text

Gold-Partner: Veranstalter: OAuth und die Office 365 API Daniel Lindemann Senior SharePoint Developer | ITaCS GmbH @daniellindemann [email protected] http://dlindemann.de

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

“Passwords are not confetti. Please stop throwing them around. (Especially if they’re not yours.)” Chris Messina – Mitbegründer OAuth-Protokoll

Slide 6

Slide 6 text

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?

Slide 7

Slide 7 text

Resource Owner Authorization Server Resource Server Client Rollen

Slide 8

Slide 8 text

Applikation registrieren Client ID Client Secret

Slide 9

Slide 9 text

Authorization Token Access Token Refresh Token Tokens

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Authentifizierungsprozess

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Voraussetzungen

Slide 16

Slide 16 text

DEMO Manuelles Registrieren einer Office 365 App mit Kalender Zugriff

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Office 365 implementiert OAuth genau wie in der Spezifikation beschrieben http://tools.ietf.org/html/rfc6749#page-24

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Office 365 Auth/Login-Seite zeigt kurze und gute Fehlermeldungen an Office 365 API wirft meistens nur Exceptions Allheilmittel Fiddler Debugging

Slide 27

Slide 27 text

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 Connected Service für Office 365 hinzufügen Getting started

Slide 28

Slide 28 text

DEMO Setup Starter Project

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

{ 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

Slide 31

Slide 31 text

{ 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

Slide 32

Slide 32 text

Warum sollte ICH über OAuth Bescheid wissen? Fazit OAuth

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Office DEV Center

Slide 36

Slide 36 text

FRAGEN?

Slide 37

Slide 37 text

Ich freue mich auf Ihr Feedback!

Slide 38

Slide 38 text

Gold-Partner: Veranstalter: Vielen Dank! Daniel Lindemann @daniellindemann [email protected] http://dlindemann.de