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|[email protected]
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", "[email protected]","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
[email protected]://www.itacs.de
@FabianMoritz
http://sharepointcommunity.de/fabianm