Fabian Moritz MVP Share Point Server Share Point
Fabian Moritz | MVP Share. Point Server Share. Point Security Das Share. Point 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
Share. Point vs. Windows-Identität Worker Prozess Share. Point-Objekte Listen, Bibliotheken, Dateien Share. Point System App Pool Account Backend-Datenbanken SQL Server XML-Dateien und andere Ressourcen Webserver
Authentifizierung Classic NT Token Windows Identität Nur noch via Power. Shell 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
Share. Point Claims Encoding i: 0#. w|contosofabian 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 CONTOSOfabianm Alle authentifizierten Windows-Nutzer Windows. Sicherheitsgruppe i: 0#. w|contosofabianm c: 0!. s|windows 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 Http. Context. Current. Identity; • Weiterhin möglich SPContext. Current. Web. Current. User; • Der Claims Weg IClaims. Identity identity = (Claims. Identity)Thread. Current. Principal. 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
Share. Point-Rechte
Benutzerlisten in Share. Point • Users - Benutzer, die explizit berechtigt wurden • All. Users - Authentifizierte Benutzer der Website • Site. Users - Alle Benutzer der Site Collection SPWeb current. Web = SPContext. Current. Site. Root. Web; // Explizit berechtigte Nutzer SPUser. Collection users = current. Web. Users; // Authentifizierte Nutzer SPUser. Collection all. Users = current. Web. All. Users; // Alle Nutzer SPUser. Collection site. Users = current. Web. Site. Users;
Nutzer explizit berechtigen • Verwaltung über Role Assignments • Rechtezuweisung über Role Definition //SPRole. Definition für Teilnehmen SPRole. Definition role. Contribute = current. Web. Role. Definitions. Get. By. Type(SPRole. Type. Contributor) ; //Neues Role. Assignment erzeugen SPRole. Assignment role. Assignment = new SPRole. Assignment( "i: 0#. f|ldapmember|fabianm", "fabian. moritz@itacs. de", "Fabian Moritz", "Share. Point MVP"); //Teilnehmenrecht der Rolle zuweisen role. Assignment. Role. Definition. Bindings. Add(role. Contribute); current. Web. Role. Assignments. Add(role. Assignment);
Share. Point-Gruppen • Gruppierung von Benutzern • Vergabe von Rechten für SP-Objekte • Verwaltung auf Ebene der Site Collection SPWeb web = SPContext. Current. Web; web. Site. Groups. Add( "Demo Gruppe", web. Site. Administrators[0], null, "Per Code generiert!"); SPGroup group = web. Site. Groups["Demo Gruppe"]; group. Add. User(SPContext. Current. Web. Current. User); web. Associated. Groups. Add(group);
SPWeb. Ensure. User • Der alte Weg SPUser the. Old. Way = SPContext. Current. Web. Ensure. User(@"contosofritzh"); • Der Weg mit Claims SPClaim. Provider. Manager claim. Provider. Manager = SPClaim. Provider. Manager. Local; if (claim. Provider. Manager != null) { SPClaim claim = new SPClaim( SPClaim. Types. User. Logon. Name, "fritzh", "http: //www. w 3. org/2001/XMLSchema#string", SPOriginal. Issuers. Format(SPOriginal. Issuer. Type. Forms, "ldapmember")); string encoded. Claim. String = claim. Provider. Manager. Encode. Claim(claim); SPUser user = SPContext. Current. Web. Ensure. User(encoded. Claim. String); }
Share. Point-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. Get. List. From. Url( web. Url + "/Freigegebene Dokumente/Forms/All. Items. aspx"); // get members group and assignment SPGroup group = web. Site. Groups["Mitglieder"]; SPRole. Assignment group. Assignment = new SPRole. Assignment(group); SPRole. Definition role. Read = web. Role. Definitions. Get. By. Type(SPRole. Type. Reader); // break role inheritance docs. Break. Role. Inheritance(false); group. Assignment. Role. Definition. Bindings. Add(role. Read); docs. Role. Assignments. Add(group. Assignment); // reset role inheritance docs. Reset. Role. Inheritance();
Auf Rechte prüfen SPSite site = SPContext. Current. Site; SPUser user = SPContext. Current. Web. Ensure. User("i: #0. f|pdapmember|fritzh"); using (SPSite impersonated. Site = new SPSite(site. ID, user. User. Token)) { using (SPWeb impersonated. Web = impersonated. Site. Open. Web()) { foreach (SPList list in impersonated. Webs) { if(list. Does. User. Have. Permissions(SPBase. Permissions. Manage. Lists)) { // 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. Run. With. Elevated. Privileges(()>= { // Code wird mit heraufgestuften Rechte ausgeführt // SHAREPOINTSYSTEM });
Code impersonifizieren • Zugriff auf Backend-Systeme mit Windows-Identität • Claims to Windows Token Service // ist aktuelle Identität ein Win. Claim if (SPSecurity. Context. Is. Windows. Identity. Available) { // nutze des c 2 WTS und hole die Windows identity Windows. Identity wid = SPSecurity. Context. Get. Windows. Identity(); // Impersonifizieren using (Windows. Impersonation. Context 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
Share. Point 2013 Apps
App Architektur REST, OAuth, OData, Remote Events Share. Point & Exchange Server Office 365 On-Premise Plattformen IIS Workflow SQL Azure Runtime Azure Websites Azure Workflows SQL Azure On Premises Cloud
Apps Authentifizierung Share. Point App Web Share. Point Cloud App OAuth Sandbox
Authentifizierungs-Prozess 1 Share. Point authentifiziert den Client mit CLAIMS 2 Share. Point erfragt den Kontext-Token beim STS 3 ACS (Access Control Service) gibt den (signierten) Kontext-Token zurück 4 Share. Point 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 Share. Point. Website mit dem Access Token (OAuth) zu 9 Share. Point 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 <App. Permission. Requests> <App. Permission. Request Scope="http: //sharepoint/content/sitecollection/web/list" Right="Full. Control" /> <App. Permission. Request Scope="http: //sharepoint/content/sitecollection/web" Right="Read" /> <App. Permission. Request Scope="http: //sharepoint/search" Right="Query. As. User. Ignore. App. Principal" /> <App. Permission. Request Scope="http: //sharepoint/taxonomy" Right="Write" /> </App. Permission. Requests>
Demo Share. Point 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/fp 179924. 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 ITa. CS Gmb. H MVP Share. Point Server Fabian. Moritz@itacs. de http: //www. itacs. de http: //sharepointcommunity. de/fabianm @Fabian. Moritz
- Slides: 37