Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ASP.NET Core Security

372 views

Published on

Folien des Vortrags ASP.NET Core Security bei der .net user group Köln am 13. Dezember 2016

Published in: Technology
  • Login to see the comments

ASP.NET Core Security

  1. 1. ASP.NET Core Security Wie man sich ordentlich Anmeldet, Autorisiert und Daten schützt
  2. 2. Was gibt es heute? Authentifizierung Autorisierung Datenschutz Grundlagen Feinheiten
  3. 3. Was gibt es nicht? • 1x1 ASP.NET Core • 1x1 ASP.NET Core MVC • Keine Erklärung des OpenId oder anderer Protokolls • Außer das was nicht verhindert werden kann ;) • Fragt wenn was unklar sein sollte.
  4. 4. Die Basics • IPrincipal => ClaimsPrincipal • ClaimsIdentity • Claims • ALLES sind Claims • und das schon seit .NET 4.5
  5. 5. ClaimsPrincipal • httpContext.User • controller.User • Bei .NET Core kein CurrentPrincipal am Thread • Thread.CurrentPrincipal und ClaimsPrincipal.Current nicht nutzen • Also durchreichen wenn notwendig • per DI/IoC über IHttpContextAccessor im Constructor holen • direkt per IoC ClaimsPrincipal reinreichen (muss man manuell machen)
  6. 6. Die ASP.NET Core Bausteine Host ASP.NET Core Client Middleware Middleware Application
  7. 7. AuthenticationManager • httpContext.Authentication • AuthenticationScheme • Zugriff auf die Schemas • SignInAsync() • SignOutAsync() • ChallengeAsync()
  8. 8. Authentication mit Cookies • Beinhaltet die Claims des angemeldeten Benutzer • Ist kryptograpisch sicher verschlüsselt • Quasi FormsAuthentication bei WebForms ;) • Nuget: Microsoft.AspNetCore.Authentication.Cookies • Docs: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie
  9. 9. Authentication mit Cookies • Startup Klasse • Vor den zu schützenden Bereich
  10. 10. Authentication mit Cookies • SignInAsync()
  11. 11. Live Coding Cookie basierte Anmeldung mit einem Formular
  12. 12. Authentication mit Cookies • Name des AuthenticationScheme • SignIn und SignOut über den Namen des Schemas • Die Größe des Cookies nicht aus den Augen verlieren • Name Claim nicht vergessen • Return Url berücksichtigen, nur zu eigenen Seiten • Per Events eingreifen
  13. 13. Authentication mit OpenId Connect • Google • Office 365 • Azure Active Directory • Identity Server 3 und 4 • Microsoft Konto • und viele mehr • Auf OAuth2 basierend • Standard Claims • Keine Authorisation • Nur als exemplarisches Beispiel • trotzdem viel Spielraum
  14. 14. Authentication mit OpenId Connect • Startup Klasse • Vor den zu schützenden Bereich • Nach der Cookie Authentication
  15. 15. Authentication mit OpenId Connect • Challenge selbst veranlassen • Direkt über den AuthenticationManger • Oder bei MVC über ChallengeResult
  16. 16. Live Coding OpenId Connect basierte Anmeldung, zusammenspiel von AutomaticChallenge, Cookies und Co.
  17. 17. Authentication mit OpenId Connect • Name Claim ist anderes • Für zentrales Logout das id_token merken • Komplettes Profil muss separat angefordert werden • Braucht Cookies wenn man lokal anmelden will • Per Events eingreifen
  18. 18. API Authentication mit Jwt Bearer Token • Wie Cookie Authentication • Token muss schon vorhanden sein • Von externen Systemen • Issuer Signing Key muss manuell gesetzt werden.
  19. 19. Microsoft ASP.NET Core Identity • Nutzt die Authentication Provider • Benutzer, Claims für Benutzer • Rollen, Claims für Rollen • Externe Logins • Token Store • Zwei Faktor Authentication • Achtet auf den Kleinkram
  20. 20. Autorisierung • Funktionen in einer Anwendung erlauben oder verbieten • Auf Basis der Benutzerinformationen • Klassisch ist die Rollenbasierte Autorisierung • Claims basierte Autorisierung bis jetzt Stiefmütterlich • Auch mit ASP.NET Core, nur besser
  21. 21. Policy basierte Autorisierung • Definition zur Laufzeit • Eindeutigen Namen • Rollen • Claims • Werte für Claims • Assertions • Haben eine Liste von IAuthorizationRequirement • IAuthorizationRequirementHandler
  22. 22. Definition von Policies
  23. 23. IAuthorizationRequirement
  24. 24. IAuthorizationRequirementHandler
  25. 25. Anwendung von Policies
  26. 26. Policy Autorisierung
  27. 27. Autorisierung mit Policies • Eine Policy kann mehrere Requirements haben • Alle Requirements in einer Policy müssen Succeeded sein • Mehrere Handler pro Requirement möglich • Einer davon muss Succeeden • Jeder Requirement Handler kann Policy direkt auf Failed setzen
  28. 28. Resourcen Autorisierung
  29. 29. Resource RequirementHandler
  30. 30. Autorisierung mit Resourcen • Via AuthorizationRequirementHandler • oder Policy • Resource-Property im HandlerContext • OperationAuthorizationRequirment oder eigenes
  31. 31. DataProtection • Datenschnipsel • z.B. Cookies, Bestätigungscode, Nachrichten • Früher war der MachineKey • Der war immer gleich für die Lebenszeit der Anwendung • Stand oft in der web.config für einfaches Deployment • Wieder von Katana inspiriert ;)
  32. 32. IDataProtectionProvider • protectionProvider.CreateProtector(string purpose) • protector.Protect() • protector.Unprotect() • protector.CreateProtector()
  33. 33. DataProtectionProvider • Nötig wegen Plattform unabhängigkeit • Zentraler Keystore je nach Plattform • Automatischer KeyExchange alle 90 Tage • Automatische Entschlüsselung bei noch vorhandenen Keys • Bei abgelaufen Keys muss man „manuell“ ran. • Hierarchie möglich • Jede Anwendung = eigenen Ebene (aber überschreibbar)
  34. 34. Secrets • Zugangsdaten • ConnectionStrings • ClientId, ClientSecrets • Username, Password • usw. • Haben nichts im Quelltext verloren
  35. 35. User Secrets verwenden Startup.cs project.json %APPDATA%MicrosoftUserSecrets{userSecretsId}secrets.json ~/.microsoft/usersecrets/{userSecretsId}/secrets.json
  36. 36. Secret Manager CLI • dotnet user-secrets • dotnet restore nicht vergessen Commands • list • set • remove • clear
  37. 37. Cookie Policy • Cookie Defaults für alle Cookies • HttpOnly und Secure, sehr einfach • CallBacks für weitere Einstellungen • Nuget: Microsoft.AspNetCore.CookiePolicy
  38. 38. View Controller gegen CSRF absichern • ValidateAntiforgeryTokenAttribute • POST, PUT etc. manuell und einzeln absichern • AutoValidateAntiforgeryTokenAttribute • Alles aus GET, HEAD und OPTIONS • Zur Basic Klasse hinzufügen • oder Globaler Filter • @Html.AntiForgeryToken() innerhalb des Formulars
  39. 39. Site API Controller gegen CSRF absichern • Notwendig wenn man Cookie Authentication hat • Dasselbe Token im HTTP Header oder Query String mitschicken. • Dem System den Header bekannt machen • Auch bei GET und Co mitsenden • ValidateAntiForgeryAttribute verwenden
  40. 40. Site API sollen 401, 403 senden • Bei Cookie Authentication • man wir normalerweise redirected • AJAX Request sollten HTTP Header setzen • X-Requested-With = XMLHttpRequest • Dann wird 401 und 403 anstatt 302 gesendet • Location-Header beinhaltet weiterhin die Redirect Url

×