37
Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013- Sicherheitssystem

Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Embed Size (px)

Citation preview

Page 1: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Fabian Moritz | MVP SharePoint Server

SharePoint SecurityDas SharePoint 2013-Sicherheitssystem

Page 2: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

Page 3: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Identitäten

App Pool

Farm

System

Benutzer

Page 4: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SharePoint vs. Windows-Identität

Webserver

Worker Prozess

SharePoint System

App Pool Account

XML-Dateien und andere Ressourcen

SharePoint-ObjekteListen, Bibliotheken, Dateien

Backend-DatenbankenSQL Server

Page 5: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Classic

Authentifizierung

NT TokenWindows Identität

Claims

NT TokenWindows Identität

ASP.NET (FBA)LDAP,

Custom, etc.

SAML 1.1ADFS, Live ID,

etc.

SAML TokenClaims

Identität

SPUser

Nur noch via PowerShell

Page 6: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Authentifizierungs-Prozess

Quelle: http://msdn.microsoft.com

Page 7: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SharePoint Claims Encoding

i:0#.w|contoso\fabian

Claim Identität

c = andere Identitäten

i:/c:

Reserviert für zukünftige Claim Typen

0

Claim Typ# = Logon,5 = e-mail,- = role+ = group% = farm! = identity provider

#/./?/S etc.

Herausgeberw = windows,s = local STSm = membershipr = rolet = trusted STSp = personalc = claim providerf = forms

w/s/m/r/t/c/f etc.

Claim Wert Bei Forms mit weiteren | für den Namen des Herausgebers

Login Name

Page 8: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Claims Encoding BeispieleWindows Account CONTOSO\fabianm

Alle authentifizierten

Windows-Nutzer

Windows-

Sicherheitsgruppe

Federated Location mit E-Mail als Login Namen

Membership Provider

i:0#.w|contoso\fabianm

c:0!.s|windows

c:0+.w|s-1-5-21…

i:05.t|azure|[email protected]

i:0#.f|membership|fabianm

Page 9: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Identität ermitteln

• Der alte WegHttpContext.Current.Identity;

• Weiterhin möglichSPContext.Current.Web.CurrentUser;

• Der Claims WegIClaimsIdentity identity = (ClaimsIdentity)Thread .CurrentPrincipal.Identity;

Page 10: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Formular-basierte Authentifizierung mit Claims

Demo

Page 11: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

Page 12: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Die Rolle der Site Collection

• Sicherheitsgrenze• Hierarchie von Webs• Gruppendefinition• Höchste Einheit der

Berechtigungs-vererbung

• Backup / Recovery• Site Coll. Papierkorb

Page 13: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Berechtigungslevel

Page 14: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SharePoint-Rechte

Page 15: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Benutzerlisten in SharePoint• Users - Benutzer, die explizit berechtigt wurden• AllUsers - Authentifizierte Benutzer der Website • SiteUsers - Alle Benutzer der Site Collection

SPWeb currentWeb = SPContext.Current.Site.RootWeb;

// Explizit berechtigte NutzerSPUserCollection users = currentWeb.Users;

// Authentifizierte NutzerSPUserCollection allUsers = currentWeb.AllUsers;

// Alle Nutzer SPUserCollection siteUsers = currentWeb.SiteUsers;

Page 16: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Nutzer explizit berechtigen

• Verwaltung über Role Assignments• Rechtezuweisung über Role Definition

//SPRoleDefinition für TeilnehmenSPRoleDefinition roleContribute =

currentWeb.RoleDefinitions.GetByType(SPRoleType.Contributor) ;

//Neues RoleAssignment erzeugenSPRoleAssignment roleAssignment = new SPRoleAssignment(

"i:0#.f|ldapmember|fabianm", "[email protected]","Fabian Moritz",

"SharePoint MVP");

//Teilnehmenrecht der Rolle zuweisenroleAssignment.RoleDefinitionBindings.Add(roleContribute);currentWeb.RoleAssignments.Add(roleAssignment);

Page 17: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SharePoint-Gruppen

• Gruppierung von Benutzern• Vergabe von Rechten für SP-Objekte• Verwaltung auf Ebene der Site Collection

SPWeb web = SPContext.Current.Web;web.SiteGroups.Add(

"Demo Gruppe",web.SiteAdministrators[0],null,"Per Code generiert!");

SPGroup group = web.SiteGroups["Demo Gruppe"];group.AddUser(SPContext.Current.Web.CurrentUser);web.AssociatedGroups.Add(group);

Page 18: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SPWeb.EnsureUser

• Der alte Weg

• Der Weg mit Claims

SPUser theOldWay = SPContext.Current.Web.EnsureUser(@"contoso\fritzh");

SPClaimProviderManager claimProviderManager = SPClaimProviderManager.Local; if (claimProviderManager != null){

SPClaim claim = new SPClaim(SPClaimTypes.UserLogonName, "fritzh", "http://www.w3.org/2001/XMLSchema#string",SPOriginalIssuers.Format(SPOriginalIssuerType.Forms,

"ldapmember"));

string encodedClaimString = claimProviderManager.EncodeClaim(claim);

SPUser user = SPContext.Current.Web.EnsureUser(encodedClaimString);}

Page 19: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SharePoint-Objekte absichern

• Jedes Objekt verfügt über eine ACL

• ACLs werden vererbt(der Parent wird genutzt)

• Aufbrechen möglich

Page 20: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Vererbung aufbrechenSPWeb web = SPContext.Current.Web; // get listSPList docs = web.GetListFromUrl(

web.Url + "/Freigegebene Dokumente/Forms/AllItems.aspx");

// get members group and assignmentSPGroup group = web.SiteGroups["Mitglieder"];SPRoleAssignment groupAssignment = new SPRoleAssignment(group);SPRoleDefinition roleRead = web.RoleDefinitions.GetByType(SPRoleType.Reader);

// break role inheritancedocs.BreakRoleInheritance(false);groupAssignment.RoleDefinitionBindings.Add(roleRead);docs.RoleAssignments.Add(groupAssignment);

// reset role inheritancedocs.ResetRoleInheritance();

Page 21: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Auf Rechte prüfenSPSite site = SPContext.Current.Site;SPUser user = SPContext.Current.Web.EnsureUser("i:#0.f|pdapmember|fritzh");

using (SPSite impersonatedSite = new SPSite(site.ID, user.UserToken)){ using (SPWeb impersonatedWeb = impersonatedSite.OpenWeb()) { foreach (SPList list in impersonatedWeb.Webs) { if(list.DoesUserHavePermissions(SPBasePermissions.ManageLists)) { // do sth. } } }}

Page 22: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Benutzer, Gruppen und Berechtigungen verwalten

Demo

Page 23: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

Page 24: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Code-Heraufstufung

• Code wird mit dem Token des aktuell angemeldeten Nutzers ausgeführt

• In einigen Szenarien können höhere Rechte erforderlich sein (Heraufstufung)// Code wird mit Token des aktuellen Nutzers ausgeführt// i:#0.f|ldapmember|fabianm

SPSecurity.RunWithElevatedPrivileges(()>={

// Code wird mit heraufgestuften Rechte ausgeführt// SHAREPOINT\SYSTEM

});

Page 25: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Code impersonifizieren

• Zugriff auf Backend-Systeme mit Windows-Identität

• Claims to Windows Token Service

// ist aktuelle Identität ein WinClaimif (SPSecurityContext.IsWindowsIdentityAvailable){ // nutze des c2WTS und hole die Windows identity WindowsIdentity wid = SPSecurityContext.GetWindowsIdentity(); // Impersonifizieren using (WindowsImpersonationContext ctxt = wid.Impersonate()) { // Zugriff auf Backend / Windows Ressourcen }}

Page 26: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Heraufstufung und Impersonifizierung

Demo

Page 27: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

Page 28: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SharePoint 2013 Apps

Plattformen Dienste und DatenApps

Apps Store und Katalog

Urlaubs-antrag

EventManagement

Währungsrechner

Urlaubs-antrag

RisikoManagementHelp Desk

Page 29: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

App Architektur

Plat

tfor

mA

pp

Client Code: HTML / CSS / JavaScript

Server Code: HTML, ASP.NET, PHP, etc.

SharePoint(Online oder On-Premises)

Ser

vice

s

On Premises

SharePoint & Exchange Server

On-Premise PlattformenIIS

WorkflowSQL

Cloud

Office 365

Azure RuntimeAzure WebsitesAzure Workflows

SQL Azure

REST, OAuth, OData, Remote Events

3rd Party DiensteBing, SalesForce, SAP, Twitter, Facebook

Page 30: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SharePoint

SharePoint

App Web

Cloud App

SharePoint

Apps Authentifizierung

SharePoint

Sandbox

OA

uth

Page 31: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Authentifizierungs-Prozess1 SharePoint authentifiziert den Client mit CLAIMS

Der Nutzer greift mit dem Token auf die App zu (wird als IFrame in der Seite gerendert)

5

Die App extrahiert den Kontext-Token und übergibt diesen dem ACS (Access Control Service)

6

SharePoint erfragt den Kontext-Token beim STS2

ACS (Access Control Service)gibt den (signierten) Kontext-Token zurück

3

SharePoint leitet den Token an den Nutzer weiter4

Der ACS gibt einen Zugriffs-Token mit den Rechten des Nutzers an die App zurück

7

Die App greift via CSOM/REST auf die SharePoint-Website mit dem Access Token (OAuth) zu

8

SharePoint authentifiziert die App und verarbeitet die CSOM/REST-Abfrage

9

Die App sendet das HTML an den Client10

Quelle: http://msdn.microsoft.com

Page 32: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

App-Berechtigungen

• App-Berechtigungen…– sind anders als Nutzer-Berechtigungen– gelten für sämtliche Nutzer– haben keine Hierarchie

• Apps haben eine Standard-Berechtigung– Limitierte Leserechte auf das Host Web– Apps können weitere Rechte beantragen– Der installierende Nutzer vergibt die Rechte

Page 33: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Rechte definieren

• Wird über das App-Manifest gesteuert

<AppPermissionRequests> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="FullControl" /> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="Read" /> <AppPermissionRequest Scope="http://sharepoint/search" Right="QueryAsUserIgnoreAppPrincipal" /> <AppPermissionRequest Scope="http://sharepoint/taxonomy" Right="Write" /> </AppPermissionRequests>

Page 34: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

SharePoint Apps-Berechtigungen

Demo

Page 35: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

Page 36: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Und nun?

• Laden Sie sich die Beispiele herunterhttp://sharepointcommunity.de/fabianm

• Registrieren Sie sich für eine Office 365 Developer Sitehttp://msdn.microsoft.com/en-us/library/fp179924.aspx

• Nutzen Sie die MSDN Libraryhttp://msdn.microsoft.com/en-US/

• Machen Sie sich mit Claims, OAuth und dem App Development vertraut

Page 37: Fabian Moritz | MVP SharePoint Server SharePoint Security Das SharePoint 2013-Sicherheitssystem

Fabian MoritzITaCS GmbHMVP SharePoint Server

[email protected]://www.itacs.de

@FabianMoritz

http://sharepointcommunity.de/fabianm