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

Authorize your Apps! - OAuth in SharePoint 2013

Authorize your Apps! - OAuth in SharePoint 2013

Daniel Lindemann

September 25, 2014
Tweet

More Decks by Daniel Lindemann

Other Decks in Programming

Transcript

  1. Zugriff einer Anwendung Oldschool 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, …
  2. Probleme Passwort wird an Drittanbieter herausgegeben Drittanbieter Applikation hat Zugriff

    auf alle Daten Drittanbieter muss Passwörter speichern Ändert der Benutzer sein Passwort hat der Drittanbieter keinen Zugriff mehr
  3. “Passwords are not confetti. Please stop throwing them around. (Especially

    if they’re not yours.)” Chris Messina – Mitbegründer OAuth-Protokoll
  4. Was ändert sich 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)
  5. Scopes Beschreiben welche Daten der Consumer abrufen darf Wird beim

    Anfordern des Authorization Tokens definiert Beispiel: https://myservice.de/oauth/2/get_authorizationCode?client_id=123&response_type=cod e&scope=Profile.Read,News.Edit&redirect_uri=https%3A%2F%2Fmyservice.de%2Fapp_au thorized
  6. Zugriff einer Anwendung mit OAuth 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
  7. App-Berechtigungen in SharePoint App-Berechtigungen werden in der AppManifest.xml konfiguriert Berechtigungserteilung

    bei Installtion Aufbau eines PermissionRequest <AppPermissionRequest Scope=http://sharepoint/content/sitecollection/web” Right="Manage" /> Produkt Permission Provider Objekt Berechtigung
  8. SharePoint Scopes Scope URI Scope Alias Available Rights http://sharepoint/content/sitecollection Site

    Read, Write, Manage http://sharepoint/content/sitecollection/web Web Read, Write, Manage http://sharepoint/content/sitecollection/web/list List Read, Write, Manage http://sharepoint/content/tenant AllSites Read, Write, Manage http://sharepoint/bcs/connection None (currently not supported) Read http://sharepoint/search Search QueryAsUserIgnoreAppPrincipal http://sharepoint/projectserver ProjectAdmin Manage http://sharepoint/projectserver/projects Projects Read, Write http://sharepoint/projectserver/projects/project Project Read, Write http://sharepoint/projectserver/enterpriseresources ProjectResources Read, Write http://sharepoint/projectserver/statusing ProjectStatusing SubmitStatus http://sharepoint/projectserver/reporting ProjectReporting Read http://sharepoint/projectserver/workflow ProjectWorkflow Elevate http://sharepoint/social/tenant AllProfiles Read, Write, Manage http://sharepoint/social/core Social Read, Write, Manage http://sharepoint/social/microfeed Microfeed Read, Write, Manage http://sharepoint/taxonomy TermStore Read, Write
  9. SharePoint App OAuth Flow 1. Start App 4. App Redirect

    (mit Token) 8. Request mit Access Token 9. Daten von SharePoint 2. Anfrage Context Token 3. Erhalt Context Token (signiert) 5. Anfrage zur App-Startseite mit Context Token 10. App-Startseite mit Content und SharePoint Daten 7. Access Token 6. Refresh Token
  10. Context Token {"typ":"JWT", "alg":"none"}.{ "aud":"0794723a-ca7f-42b3-af6f-c424a222f02b/localhost:44309@3eef8910-0332-4feb-9436-8c4579d2696d", "iss":"00000001-0000-0000-c000-000000000000@3eef8910-0332-4feb-9436-8c4579d2696d", "nbf":"1411411418", "exp":"1411454618", "appctxsender":"00000003-0000-0ff1-ce00-000000000000@3eef8910-0332-4feb-9436-8c4579d2696d", "appctx":"{

    \"CacheKey\":\"QTJ+bUnrMnsmsRCLh613QhpixdDTZY5WvqNWD9WtIUM=\", \"SecurityTokenServiceUri\":\"https://accounts.accesscontrol.windows.net/tokens/OAuth/2\" }", "refreshtoken":"IAAAAO_y8wP5- onrc5xvPfEU9NT6393L1CZVYTcP5wccQAdtKk1npcQmQUG7eZ4OqknbI0PEacfwwaBFx7yF6L1nVGz408Zerh4v0 847lw_9AX5XP7TU-LYYjrYHWHU-XiAIvyDdV- ZD30_5wev1fZwGAFAXein6BSVGgguyDbqvYOinESsHTfE5JC13vEdZ5JyPywWnwTxsNXAJIdlLB4ByEHEmbLbG1w QHLymSw09YQjUqN5fXsDe2w4GA3DbgfoitYPEvXHsxeQZ2DrmW2T4PomExTltG6H58VlKEdoDCq4wB0Xq2q9 CWkrIRI7qhCtJoHRgRXj1GYfQBwaTcC7wyTPg", "isbrowserhostedapp":"true" }
  11. Context Token {"typ":"JWT", "alg":"none"}.{ "aud":"0794723a-ca7f-42b3-af6f-c424a222f02b/localhost:44309@3eef8910-0332-4feb-9436-8c4579d2696d", "iss":"00000001-0000-0000-c000-000000000000@3eef8910-0332-4feb-9436-8c4579d2696d", "nbf":"1411411418", "exp":"1411454618", "appctxsender":"00000003-0000-0ff1-ce00-000000000000@3eef8910-0332-4feb-9436-8c4579d2696d", "appctx":"{

    \"CacheKey\":\"QTJ+bUnrMnsmsRCLh613QhpixdDTZY5WvqNWD9WtIUM=\", \"SecurityTokenServiceUri\":\"https://accounts.accesscontrol.windows.net/tokens/OAuth/2\" }", "refreshtoken":"IAAAAO_y8wP5- onrc5xvPfEU9NT6393L1CZVYTcP5wccQAdtKk1npcQmQUG7eZ4OqknbI0PEacfwwaBFx7yF6L1nVGz408Zerh4v0 847lw_9AX5XP7TU-LYYjrYHWHU-XiAIvyDdV- ZD30_5wev1fZwGAFAXein6BSVGgguyDbqvYOinESsHTfE5JC13vEdZ5JyPywWnwTxsNXAJIdlLB4ByEHEmbLbG1w QHLymSw09YQjUqN5fXsDe2w4GA3DbgfoitYPEvXHsxeQZ2DrmW2T4PomExTltG6H58VlKEdoDCq4wB0Xq2q9 CWkrIRI7qhCtJoHRgRXj1GYfQBwaTcC7wyTPg", "isbrowserhostedapp":"true" } Client ID App URL Tenant ID Azure ACS Tenant ID Start Ende User ID + Issuer + App + Realm Tenant ID SharePoint STS URL Refresh Token
  12. Access Token { "typ":"JWT", "alg":"RS256", "x5t":"kriMPdmBvx68skT8-mPAB3BseeA" }.{ "aud":"00000003-0000-0ff1-ce00-000000000000/dlindemann.sharepoint.com @3eef8910-0332-4feb-9436-8c4579d2696d", "iss":"00000001-0000-0000-c000-000000000000@3eef8910-0332-4feb-9436-8c4579d2696d",

    "nbf":1411414034, "exp":1411457234, "nameid":"1003000080fd1db2", "actor":"0794723a-ca7f-42b3-af6f-c424a222f02b@3eef8910-0332-4feb-9436-8c4579d2696d", "identityprovider":"urn:federation:microsoftonline" }
  13. Access Token { "typ":"JWT", "alg":"RS256", "x5t":"kriMPdmBvx68skT8-mPAB3BseeA" }.{ "aud":"00000003-0000-0ff1-ce00-000000000000/dlindemann.sharepoint.com @3eef8910-0332-4feb-9436-8c4579d2696d", "iss":"00000001-0000-0000-c000-000000000000@3eef8910-0332-4feb-9436-8c4579d2696d",

    "nbf":1411414034, "exp":1411457234, "nameid":"1003000080fd1db2", "actor":"0794723a-ca7f-42b3-af6f-c424a222f02b@3eef8910-0332-4feb-9436-8c4579d2696d", "identityprovider":"urn:federation:microsoftonline" } SharePoint Host Web Tenant ID Azure ACS Tenant ID Start Ende UPN STS ID Tenant ID Identity Provider
  14. Start User credentials provided? Set user context OAuth token present?

    Is endpoint CSOM? Does the token include user info? End Is endpoint outside of an app web? Set app and user context Use anonymous context Set App- Only context No Yes Yes No Yes Yes Yes No No No
  15. Angriffsmöglichkeiten Man in the middle Replay Attack Übertragen von (Authentifizierungs-)

    Informationen im Klartext http://thehackernews.com/2014/07/facebook-sdk-vulnerability-puts.html
  16. Fazit Auf den ersten Blick sehr komplex Standardisiertes Protokoll Entwicklung

    wird durch das IETF weiter vorangetrieben Bildet den Kern neuer Technologien Open ID Connect
  17. Links und weitere Infos http://oauth.net/ http://hueniverse.com/oauth/ http://msdn.microsoft.com/en- us/library/office/fp142384%28v=office.15%29.aspx Authorization and

    authentication of apps for SharePoint 2013 http://blogs.technet.com/b/speschka/archive/2013/07/29/ security-in-sharepoint-apps-part-1.aspx Security in SharePoint Apps http://www.oreilly.de/catalog/9781449311605/index.html Buch Getting Stated with OAuth 2.0 http://technet.microsoft.com/en-us/library/jj219758.aspx What's new in authentication for SharePoint 2013 http://msdn.microsoft.com/en- us/library/office/dn155905%28v=office.15%29.aspx Use an Office 365 to authorize apps on an on- premises SharePoint site