4. 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
5. Authentifizierungsarten
Classic Claims
NT Token NT Token ASP.NET (FBA) SAML 1.1
Windows Windows LDAP, Custom, ADFS, Live ID,
Identität Identität etc. etc.
Nur noch via
PowerShell
SAML Token
Claims Identität
SPUser
8. SharePoint Claims Encoding
i:0#.w|itacsfabian
Claim Identität Reserviert für Claim Typ Herausgeber Claim Wert
zukünftige # = Logon, w = windows, Bei Forms mit
c = andere Claim Typen 5 = e-mail, s = local STS weiteren | für
Identitäten - = role m = membership den Namen des
+ = group Herausgebers
r = role
0 % = farm t = trusted STS
i:/c: ! = identity p = personal Login Name
provider c = claim provider
f = forms
#/./?/S etc.
w/s/m/r/t/c/f etc.
9. Claims Encoding Beispiele
Windows Account i:0#.w|contosofabianm
CONTOSOfabianm
Alle authentifizierten
c:0!.s|windows
Windows-Nutzer
Windows-
Sicherheitsgruppe 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
11. 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;
12. 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
15. Agenda
Identitäten und Authentifizierung
Rollen, Rechte und Berechtigungen
Heraufstufung und Impersonifizierung
(Cloud) App Security mit OAuth
16. Die Rolle der Site Collection
• Sicherheitsgrenze
• Hierarchie von Webs
• Gruppendefinition
• Höchste Einheit der Berechtigungs-vererbung
• Backup / Recovery
• Site Coll. Papierkorb
19. 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;
20. SPWeb.EnsureUser
• Der alte Weg
SPUser theOldWay = SPContext.Current.Web.EnsureUser(@"contosofritzh");
• 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);
}
21. 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);
22. 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);
23. SharePoint-Objekte absichern
• Jedes Objekt verfügt
über eine ACL
• ACLs werden vererbt
(der Parent wird genutzt)
• Aufbrechen möglich
24. 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();
26. Agenda
Identitäten und Authentifizierung
Rollen, Rechte und Berechtigungen
Heraufstufung und Impersonifizierung
(Cloud) App Security mit OAuth
27. 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
// SHAREPOINTSYSTEM
});
28. 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
}
}
29. Agenda
Identitäten und Authentifizierung
Rollen, Rechte und Berechtigungen
Heraufstufung und Impersonifizierung
(Cloud) App Security mit OAuth
33. Authentifizierungs-Prozess
1 SharePoint authentifiziert den Client mit CLAIMS
2 SharePoint erfragt den Kontext-Token beim STS
ACS (Access Control Service)
3
gibt den (signierten) Kontext-Token zurück
4 SharePoint leitet den Token an den Nutzer weiter
Der Nutzer greift mit dem Token auf die App zu
5
(wird als IFrame in der Seite gerendert)
Die App extrahiert den Kontext-Token und übergibt
6
diesen dem ACS (Access Control Service)
Der ACS gibt einen Zugriffs-Token mit den Rechten
7
des Nutzers an die App zurück
Die App greift via CSOM/REST auf die SharePoint-
8
Website mit dem Access Token (OAuth) zu
SharePoint authentifiziert die App und verarbeitet
9
die CSOM/REST-Abfrage
10 Die App sendet das HTML an den Client
Quelle: http://msdn.microsoft.com
34. 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
35. 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>
36. Agenda
Identitäten und Authentifizierung
Rollen, Rechte und Berechtigungen
Heraufstufung und Impersonifizierung
(Cloud) App Security mit OAuth
37. Fabian Moritz Daniel
ITaCS GmbH Lindemann
MVP SharePoint
ITaCS GmbH
Server
Senior Entwickler
Fabian.Moritz@itacs.de Daniel.Lindemann@itacs.
de
http://www.itacs.de http://www.itacs.de
http://sharepointcommunity.de/fabianm http://www.dlindemann.de/blog
@FabianMoritz @DanielLindemann