SharePoint SecurityDas Sicherheitssystem von SharePoint 2013
Fabian MoritzMVP SharePoint Server
Daniel LindemannSenior Entwickler
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
Authentifizierungsarten
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
Authentifizierungsprozess
Quelle: http://msdn.microsoft.com
Was ist ein Claim?
i:0#.w|itacs\daniel
SharePoint Claims Encoding
i:0#.w|itacs\fabianClaim 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 = formsw/s/m/r/t/c/f
etc.
Claim Wert Bei Forms mit weiteren | für den Namen des HerausgebersLogin Name
Claims Encoding BeispieleWindows Account CONTOSO\fabianmAlle authentifizierten Windows-NutzerWindows-SicherheitsgruppeFederated Location mit E-Mail als Login NamenMembership 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
Claims vs. Identity
Identity Claims
VS
Identität ermitteln• Der alte WegHttpContext.Current.Identity;
• Weiterhin möglichSPContext.Current.Web.CurrentUser;
• Der Claims WegIClaimsIdentity identity = (ClaimsIdentity)Thread .CurrentPrincipal.Identity;
Wichtige Begriffe zusammengefasst…• Identity
Attribute die einen Benutzer oder eine Gruppe beschreiben
• Security Token Verschlüsselte und signierte Liste an Claims
• Security Token Service (STS) Erstellt und signiert (Claim-)Tokens
• Identity Provider (z. B. Active Directory) Überprüft Tokens auf ihre Gültigkeit
• Relaying Party Autorisiert Identitäten anhand von Claims SharePoint 2013
DemoFormular-basierte Authentifzierung
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;
SPWeb.EnsureUser• Der alte Weg
• Der Weg mit ClaimsSPUser 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);}
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);
SharePoint-Objekte absichern• Jedes Objekt verfügt
über eine ACL• ACLs werden vererbt
(der Parent wird genutzt)• Aufbrechen möglich
Vererbung aufbrechen
SPWeb 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();
DemoBenutzer, Gruppen und Berechtigungen
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 }}
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
Plattf
orm
App
Client Code: HTML / CSS / JavaScript
Server Code: HTML, ASP.NET, PHP, etc.
SharePoint(Online oder On-Premises)
Serv
ices
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
OAuth
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 STS
2
ACS (Access Control Service)gibt den (signierten) Kontext-Token zurück3
SharePoint leitet den Token an den Nutzer weiter
4
Der ACS gibt einen Zugriffs-Token mit den Rechten des Nutzers an die App zurück7
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-Abfrage9
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>
Agenda
Identitäten und Authentifizierung
Rollen, Rechte und Berechtigungen
Heraufstufung und Impersonifizierung
(Cloud) App Security mit OAuth
Fabian MoritzITaCS GmbHMVP SharePoint Server
[email protected]://www.itacs.de
@FabianMoritzhttp://sharepointcommunity.de/fabianm
Daniel LindemannITaCS GmbHSenior Entwickler
[email protected]://www.itacs.de
@DanielLindemannhttp://www.dlindemann.de/blog