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
Identitäten
Farm
App Pool
System
Benutzer
SharePoint vs. Windows-Identität
Worker Prozess
SharePoint-Objekte
Listen, Bibliotheken, Dateien
SharePoint System
App Pool Account
Backend-Datenbanken
SQL Server
XML-Dateien und
andere Ressourcen
Webserver
Authentifizierung
Classic
NT Token
Windows
Identität
Nur noch via
PowerShell
Claims
NT Token
Windows
Identität
ASP.NET (FBA)
LDAP, Custom,
etc.
SAML Token
Claims Identität
SPUser
SAML 1.1
ADFS, Live ID,
etc.
Authentifizierungs-Prozess
Quelle: http://msdn.microsoft.com
SharePoint Claims Encoding
i:0#.w|contoso\fabian
Claim Identität
c = andere
Identitäten
Reserviert für
zukünftige
Claim Typen
0
i:/c:
Claim Typ
# = Logon,
5 = e-mail,
- = role
+ = group
% = farm
! = identity
provider
#/./?/S etc.
Herausgeber
w = windows,
s = local STS
m = membership
r = role
t = trusted STS
p = personal
c = claim provider
f = 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 Beispiele
Windows Account
CONTOSO\fabianm
i:0#.w|contoso\fabianm
Alle authentifizierten
Windows-Nutzer
c:0!.s|windows
WindowsSicherheitsgruppe
c:0+.w|s-1-5-21…
Federated Location mit
E-Mail als Login Namen
i:05.t|azure|fm@itacs.de
Membership Provider
i:0#.f|membership|fabianm
Identität ermitteln
• Der alte Weg
HttpContext.Current.Identity;
• Weiterhin möglich
SPContext.Current.Web.CurrentUser;
• Der Claims Weg
IClaimsIdentity identity =
(ClaimsIdentity)Thread
.CurrentPrincipal.Identity;
Demo
Formular-basierte Authentifizierung mit Claims
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
Berechtigungsvererbung
• 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 Nutzer
SPUserCollection users = currentWeb.Users;
// Authentifizierte Nutzer
SPUserCollection allUsers = currentWeb.AllUsers;
// Alle Nutzer
SPUserCollection siteUsers = currentWeb.SiteUsers;
Nutzer explizit berechtigen
• Verwaltung über Role Assignments
• Rechtezuweisung über Role Definition
//SPRoleDefinition für Teilnehmen
SPRoleDefinition roleContribute =
currentWeb.RoleDefinitions.GetByType(SPRoleType.Contributor) ;
//Neues RoleAssignment erzeugen
SPRoleAssignment roleAssignment = new SPRoleAssignment(
"i:0#.f|ldapmember|fabianm",
"fabian.moritz@itacs.de",
"Fabian Moritz",
"SharePoint MVP");
//Teilnehmenrecht der Rolle zuweisen
roleAssignment.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
SPUser theOldWay = SPContext.Current.Web.EnsureUser(@"contoso\fritzh");
• Der Weg mit Claims
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 aufbrechen
SPWeb web = SPContext.Current.Web;
// get list
SPList docs = web.GetListFromUrl(
web.Url + "/Freigegebene Dokumente/Forms/AllItems.aspx");
// get members group and assignment
SPGroup group = web.SiteGroups["Mitglieder"];
SPRoleAssignment groupAssignment = new SPRoleAssignment(group);
SPRoleDefinition roleRead = web.RoleDefinitions.GetByType(SPRoleType.Reader);
// break role inheritance
docs.BreakRoleInheritance(false);
groupAssignment.RoleDefinitionBindings.Add(roleRead);
docs.RoleAssignments.Add(groupAssignment);
// reset role inheritance
docs.ResetRoleInheritance();
Auf Rechte prüfen
SPSite 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.
}
}
}
}
Demo
Benutzer, Gruppen und Berechtigungen verwalten
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 WinClaim
if (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
}
}
Demo
Heraufstufung und Impersonifizierung
Agenda
Identitäten und Authentifizierung
Rollen, Rechte und Berechtigungen
Heraufstufung und Impersonifizierung
(Cloud) App Security mit OAuth
SharePoint 2013 Apps
App Architektur
REST, OAuth, OData, Remote Events
SharePoint & Exchange Server
Office 365
On-Premise Plattformen
IIS
Workflow
SQL
Azure Runtime
Azure Websites
Azure Workflows
SQL Azure
On Premises
Cloud
Apps Authentifizierung
OAuth
Authentifizierungs-Prozess
1
SharePoint authentifiziert den Client mit CLAIMS
2
SharePoint erfragt den Kontext-Token beim STS
3
ACS (Access Control Service)
gibt den (signierten) Kontext-Token zurück
4
SharePoint leitet den Token an den Nutzer weiter
5
Der Nutzer greift mit dem Token auf die App zu (wird
als IFrame in der Seite gerendert)
6
Die App extrahiert den Kontext-Token und übergibt
diesen dem ACS (Access Control Service)
7
Der ACS gibt einen Zugriffs-Token mit den Rechten
des Nutzers an die App zurück
8
Die App greift via CSOM/REST auf die SharePointWebsite mit dem Access Token (OAuth) zu
9
SharePoint authentifiziert die App und verarbeitet
die CSOM/REST-Abfrage
10
Quelle: http://msdn.microsoft.com
Die App sendet das HTML an den Client
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>
Demo
SharePoint Apps-Berechtigungen
Agenda
Identitäten und Authentifizierung
Rollen, Rechte und Berechtigungen
Heraufstufung und Impersonifizierung
(Cloud) App Security mit OAuth
Und nun?
• Laden Sie sich die Beispiele herunter
http://sharepointcommunity.de/fabianm
• Registrieren Sie sich für eine Office 365
Developer Site
http://msdn.microsoft.com/en-us/library/fp179924.aspx
• Nutzen Sie die MSDN Library
http://msdn.microsoft.com/en-US/
• Machen Sie sich mit Claims, OAuth und
dem App Development vertraut
Fabian Moritz
ITaCS GmbH
MVP SharePoint Server
Fabian.Moritz@itacs.de
http://www.itacs.de
http://sharepointcommunity.de/fabianm
@FabianMoritz