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

Preview:

Citation preview

Fabian Moritz | MVP SharePoint Server

SharePoint SecurityDas SharePoint 2013-Sicherheitssystem

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

Identitäten

App Pool

Farm

System

Benutzer

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

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

Authentifizierungs-Prozess

Quelle: http://msdn.microsoft.com

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

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|fm@itacs.de

i:0#.f|membership|fabianm

Identität ermitteln

• Der alte WegHttpContext.Current.Identity;

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

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

Formular-basierte Authentifizierung mit Claims

Demo

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

Die Rolle der Site Collection

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

Berechtigungs-vererbung

• Backup / Recovery• Site Coll. Papierkorb

Berechtigungslevel

SharePoint-Rechte

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;

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", "fabian.moritz@itacs.de","Fabian Moritz",

"SharePoint MVP");

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

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);

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);}

SharePoint-Objekte absichern

• Jedes Objekt verfügt über eine ACL

• ACLs werden vererbt(der Parent wird genutzt)

• Aufbrechen möglich

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();

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. } } }}

Benutzer, Gruppen und Berechtigungen verwalten

Demo

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

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

});

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 }}

Heraufstufung und Impersonifizierung

Demo

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

SharePoint 2013 Apps

Plattformen Dienste und DatenApps

Apps Store und Katalog

Urlaubs-antrag

EventManagement

Währungsrechner

Urlaubs-antrag

RisikoManagementHelp Desk

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

SharePoint

SharePoint

App Web

Cloud App

SharePoint

Apps Authentifizierung

SharePoint

Sandbox

OA

uth

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

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

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>

SharePoint Apps-Berechtigungen

Demo

Agenda

Identitäten und Authentifizierung

Rollen, Rechte und Berechtigungen

Heraufstufung und Impersonifizierung

(Cloud) App Security mit OAuth

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

Fabian MoritzITaCS GmbHMVP SharePoint Server

Fabian.Moritz@itacs.dehttp://www.itacs.de

@FabianMoritz

http://sharepointcommunity.de/fabianm

Recommended