SlideShare a Scribd company logo
1 of 40
ASP.NET Core Security
Wie man sich ordentlich Anmeldet, Autorisiert und Daten schützt
Was gibt es heute?
Authentifizierung Autorisierung Datenschutz
Grundlagen Feinheiten
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.
Die Basics
• IPrincipal => ClaimsPrincipal
• ClaimsIdentity
• Claims
• ALLES sind Claims
• und das schon seit .NET 4.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)
Die ASP.NET Core Bausteine
Host
ASP.NET Core
Client Middleware Middleware Application
AuthenticationManager
• httpContext.Authentication
• AuthenticationScheme
• Zugriff auf die Schemas
• SignInAsync()
• SignOutAsync()
• ChallengeAsync()
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
Authentication mit Cookies
• Startup Klasse
• Vor den zu schützenden Bereich
Authentication mit Cookies
• SignInAsync()
Live Coding
Cookie basierte Anmeldung mit einem Formular
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
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
Authentication mit
OpenId Connect
• Startup Klasse
• Vor den zu schützenden Bereich
• Nach der Cookie Authentication
Authentication mit
OpenId Connect
• Challenge selbst veranlassen
• Direkt über den AuthenticationManger
• Oder bei MVC über ChallengeResult
Live Coding
OpenId Connect basierte Anmeldung,
zusammenspiel von AutomaticChallenge, Cookies und Co.
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
API Authentication mit Jwt
Bearer Token
• Wie Cookie Authentication
• Token muss schon vorhanden sein
• Von externen Systemen
• Issuer Signing Key muss manuell gesetzt
werden.
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
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
Policy basierte Autorisierung
• Definition zur Laufzeit
• Eindeutigen Namen
• Rollen
• Claims
• Werte für Claims
• Assertions
• Haben eine Liste von IAuthorizationRequirement
• IAuthorizationRequirementHandler
Definition von Policies
IAuthorizationRequirement
IAuthorizationRequirementHandler
Anwendung von Policies
Policy Autorisierung
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
Resourcen Autorisierung
Resource RequirementHandler
Autorisierung mit Resourcen
• Via AuthorizationRequirementHandler
• oder Policy
• Resource-Property im HandlerContext
• OperationAuthorizationRequirment oder eigenes
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 ;)
IDataProtectionProvider
• protectionProvider.CreateProtector(string purpose)
• protector.Protect()
• protector.Unprotect()
• protector.CreateProtector()
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)
Secrets
• Zugangsdaten
• ConnectionStrings
• ClientId, ClientSecrets
• Username, Password
• usw.
• Haben nichts im Quelltext verloren
User Secrets verwenden
Startup.cs project.json
%APPDATA%MicrosoftUserSecrets{userSecretsId}secrets.json
~/.microsoft/usersecrets/{userSecretsId}/secrets.json
Secret Manager
CLI
• dotnet user-secrets
• dotnet restore
nicht vergessen
Commands
• list
• set
• remove
• clear
Cookie Policy
• Cookie Defaults für alle Cookies
• HttpOnly und Secure, sehr einfach
• CallBacks für weitere Einstellungen
• Nuget: Microsoft.AspNetCore.CookiePolicy
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
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
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

More Related Content

Viewers also liked

Security asp.net application
Security asp.net applicationSecurity asp.net application
Security asp.net applicationZAIYAUL HAQUE
 
Deploying Static Application Security Testing on a Large Scale
Deploying Static Application Security Testing on a Large ScaleDeploying Static Application Security Testing on a Large Scale
Deploying Static Application Security Testing on a Large ScaleAchim D. Brucker
 
ASP.NET Web API Deep Dive - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 LondonASP.NET Web API Deep Dive - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 LondonManfred Steyer
 
Azure api app autenticação e autorização
Azure api app   autenticação e autorizaçãoAzure api app   autenticação e autorização
Azure api app autenticação e autorizaçãoNicolas Takashi
 
Azure api apps - Deploy ASP.Net Core
Azure api apps - Deploy ASP.Net CoreAzure api apps - Deploy ASP.Net Core
Azure api apps - Deploy ASP.Net CoreNicolas Takashi
 
Microsoft asp.net identity security
Microsoft asp.net identity  securityMicrosoft asp.net identity  security
Microsoft asp.net identity securityrustd
 
Code review for secure web applications
Code review for secure web applicationsCode review for secure web applications
Code review for secure web applicationssilviad74
 
Beefing Up Security In ASP.NET Dot Net Bangalore 3rd meet up on May 16 2015
Beefing Up Security In ASP.NET Dot Net Bangalore 3rd meet up on May 16 2015Beefing Up Security In ASP.NET Dot Net Bangalore 3rd meet up on May 16 2015
Beefing Up Security In ASP.NET Dot Net Bangalore 3rd meet up on May 16 2015gmaran23
 
Building HTTP APIs with ASP.NET Core
Building HTTP APIs with ASP.NET CoreBuilding HTTP APIs with ASP.NET Core
Building HTTP APIs with ASP.NET CoreFilip W
 
Beefing Up Security In ASP.NET Part 2 Dot Net Bangalore 4th meet up on August...
Beefing Up Security In ASP.NET Part 2 Dot Net Bangalore 4th meet up on August...Beefing Up Security In ASP.NET Part 2 Dot Net Bangalore 4th meet up on August...
Beefing Up Security In ASP.NET Part 2 Dot Net Bangalore 4th meet up on August...gmaran23
 
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)OWASP Ottawa
 
Practical Security Testing for Developers using OWASP ZAP at Dot Net Bangalor...
Practical Security Testing for Developers using OWASP ZAP at Dot Net Bangalor...Practical Security Testing for Developers using OWASP ZAP at Dot Net Bangalor...
Practical Security Testing for Developers using OWASP ZAP at Dot Net Bangalor...gmaran23
 
Simplified Security Code Review Process
Simplified Security Code Review ProcessSimplified Security Code Review Process
Simplified Security Code Review ProcessSherif Koussa
 
Code review guidelines
Code review guidelinesCode review guidelines
Code review guidelinesLalit Kale
 
Aspnet core
Aspnet coreAspnet core
Aspnet coreeleksdev
 
ASP.NET Presentation
ASP.NET PresentationASP.NET Presentation
ASP.NET PresentationRasel Khan
 
Monitoring web application response times, a new approach
Monitoring web application response times, a new approachMonitoring web application response times, a new approach
Monitoring web application response times, a new approachMark Friedman
 

Viewers also liked (20)

Security asp.net application
Security asp.net applicationSecurity asp.net application
Security asp.net application
 
Deploying Static Application Security Testing on a Large Scale
Deploying Static Application Security Testing on a Large ScaleDeploying Static Application Security Testing on a Large Scale
Deploying Static Application Security Testing on a Large Scale
 
ASP.NET Web API Deep Dive - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 LondonASP.NET Web API Deep Dive - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 London
 
Azure api app autenticação e autorização
Azure api app   autenticação e autorizaçãoAzure api app   autenticação e autorização
Azure api app autenticação e autorização
 
Azure api apps - Deploy ASP.Net Core
Azure api apps - Deploy ASP.Net CoreAzure api apps - Deploy ASP.Net Core
Azure api apps - Deploy ASP.Net Core
 
Microsoft asp.net identity security
Microsoft asp.net identity  securityMicrosoft asp.net identity  security
Microsoft asp.net identity security
 
Code review for secure web applications
Code review for secure web applicationsCode review for secure web applications
Code review for secure web applications
 
Beefing Up Security In ASP.NET Dot Net Bangalore 3rd meet up on May 16 2015
Beefing Up Security In ASP.NET Dot Net Bangalore 3rd meet up on May 16 2015Beefing Up Security In ASP.NET Dot Net Bangalore 3rd meet up on May 16 2015
Beefing Up Security In ASP.NET Dot Net Bangalore 3rd meet up on May 16 2015
 
Null meet Code Review
Null meet Code ReviewNull meet Code Review
Null meet Code Review
 
Building HTTP APIs with ASP.NET Core
Building HTTP APIs with ASP.NET CoreBuilding HTTP APIs with ASP.NET Core
Building HTTP APIs with ASP.NET Core
 
Secure coding in C#
Secure coding in C#Secure coding in C#
Secure coding in C#
 
Beefing Up Security In ASP.NET Part 2 Dot Net Bangalore 4th meet up on August...
Beefing Up Security In ASP.NET Part 2 Dot Net Bangalore 4th meet up on August...Beefing Up Security In ASP.NET Part 2 Dot Net Bangalore 4th meet up on August...
Beefing Up Security In ASP.NET Part 2 Dot Net Bangalore 4th meet up on August...
 
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
Security Code Review for .NET - Sherif Koussa (OWASP Ottawa)
 
Practical Security Testing for Developers using OWASP ZAP at Dot Net Bangalor...
Practical Security Testing for Developers using OWASP ZAP at Dot Net Bangalor...Practical Security Testing for Developers using OWASP ZAP at Dot Net Bangalor...
Practical Security Testing for Developers using OWASP ZAP at Dot Net Bangalor...
 
Simplified Security Code Review Process
Simplified Security Code Review ProcessSimplified Security Code Review Process
Simplified Security Code Review Process
 
ASP.NET Web Security
ASP.NET Web SecurityASP.NET Web Security
ASP.NET Web Security
 
Code review guidelines
Code review guidelinesCode review guidelines
Code review guidelines
 
Aspnet core
Aspnet coreAspnet core
Aspnet core
 
ASP.NET Presentation
ASP.NET PresentationASP.NET Presentation
ASP.NET Presentation
 
Monitoring web application response times, a new approach
Monitoring web application response times, a new approachMonitoring web application response times, a new approach
Monitoring web application response times, a new approach
 

Similar to ASP.NET Core Security

Trivadis triCast Oracle Centrally Managed Users 18/19c
Trivadis triCast Oracle Centrally Managed Users 18/19cTrivadis triCast Oracle Centrally Managed Users 18/19c
Trivadis triCast Oracle Centrally Managed Users 18/19cStefan Oehrli
 
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...QAware GmbH
 
Integrations-Pattern für OpenID Connect
Integrations-Pattern für OpenID ConnectIntegrations-Pattern für OpenID Connect
Integrations-Pattern für OpenID ConnectQAware GmbH
 
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...QAware GmbH
 
Security Lab: OIDC in der Praxis
Security Lab: OIDC in der PraxisSecurity Lab: OIDC in der Praxis
Security Lab: OIDC in der PraxisQAware GmbH
 
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsDevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsStephan Kaps
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineOPEN KNOWLEDGE GmbH
 
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...OPEN KNOWLEDGE GmbH
 
OSMC 2017 | Windows Monitoring - Einrichtung und Prüfung mit Icinga2 by Chris...
OSMC 2017 | Windows Monitoring - Einrichtung und Prüfung mit Icinga2 by Chris...OSMC 2017 | Windows Monitoring - Einrichtung und Prüfung mit Icinga2 by Chris...
OSMC 2017 | Windows Monitoring - Einrichtung und Prüfung mit Icinga2 by Chris...NETWAYS
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationGWAVA
 
Cms security
Cms securityCms security
Cms securitystk_jj
 
Piwik Installation und Implementierung
Piwik Installation und ImplementierungPiwik Installation und Implementierung
Piwik Installation und ImplementierungGerd Theobald
 
Windows Azure Mobile Services
Windows Azure Mobile ServicesWindows Azure Mobile Services
Windows Azure Mobile ServicesJan Hentschel
 
D3 000908 Lotusday Hagen Bcc Id Vault
D3 000908 Lotusday Hagen Bcc Id VaultD3 000908 Lotusday Hagen Bcc Id Vault
D3 000908 Lotusday Hagen Bcc Id VaultAndreas Schulte
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsUlrich Schmidt
 
REST - Hypermedia und Sicherheit
REST - Hypermedia und SicherheitREST - Hypermedia und Sicherheit
REST - Hypermedia und SicherheitMayflower GmbH
 
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der PraxisMehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der PraxisJan Hentschel
 

Similar to ASP.NET Core Security (20)

Trivadis triCast Oracle Centrally Managed Users 18/19c
Trivadis triCast Oracle Centrally Managed Users 18/19cTrivadis triCast Oracle Centrally Managed Users 18/19c
Trivadis triCast Oracle Centrally Managed Users 18/19c
 
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
 
Integrations-Pattern für OpenID Connect
Integrations-Pattern für OpenID ConnectIntegrations-Pattern für OpenID Connect
Integrations-Pattern für OpenID Connect
 
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
Anwendungsübergreifende Authentifizierung: Integrations-Pattern für OpenID Co...
 
Security Lab: OIDC in der Praxis
Security Lab: OIDC in der PraxisSecurity Lab: OIDC in der Praxis
Security Lab: OIDC in der Praxis
 
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsDevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-Pipeline
 
iOS Network Extensions
iOS Network ExtensionsiOS Network Extensions
iOS Network Extensions
 
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
 
SharePoint Claims und FBA
SharePoint Claims und FBASharePoint Claims und FBA
SharePoint Claims und FBA
 
OSMC 2017 | Windows Monitoring - Einrichtung und Prüfung mit Icinga2 by Chris...
OSMC 2017 | Windows Monitoring - Einrichtung und Prüfung mit Icinga2 by Chris...OSMC 2017 | Windows Monitoring - Einrichtung und Prüfung mit Icinga2 by Chris...
OSMC 2017 | Windows Monitoring - Einrichtung und Prüfung mit Icinga2 by Chris...
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
Cms security
Cms securityCms security
Cms security
 
Piwik Installation und Implementierung
Piwik Installation und ImplementierungPiwik Installation und Implementierung
Piwik Installation und Implementierung
 
Windows Azure Mobile Services
Windows Azure Mobile ServicesWindows Azure Mobile Services
Windows Azure Mobile Services
 
D3 000908 Lotusday Hagen Bcc Id Vault
D3 000908 Lotusday Hagen Bcc Id VaultD3 000908 Lotusday Hagen Bcc Id Vault
D3 000908 Lotusday Hagen Bcc Id Vault
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
 
REST - Hypermedia und Sicherheit
REST - Hypermedia und SicherheitREST - Hypermedia und Sicherheit
REST - Hypermedia und Sicherheit
 
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der PraxisMehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
 
GWT
GWTGWT
GWT
 

ASP.NET Core Security

  • 1. ASP.NET Core Security Wie man sich ordentlich Anmeldet, Autorisiert und Daten schützt
  • 2. Was gibt es heute? Authentifizierung Autorisierung Datenschutz Grundlagen Feinheiten
  • 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. Die Basics • IPrincipal => ClaimsPrincipal • ClaimsIdentity • Claims • ALLES sind Claims • und das schon seit .NET 4.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. Die ASP.NET Core Bausteine Host ASP.NET Core Client Middleware Middleware Application
  • 7. AuthenticationManager • httpContext.Authentication • AuthenticationScheme • Zugriff auf die Schemas • SignInAsync() • SignOutAsync() • ChallengeAsync()
  • 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. Authentication mit Cookies • Startup Klasse • Vor den zu schützenden Bereich
  • 11. Live Coding Cookie basierte Anmeldung mit einem Formular
  • 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. 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. Authentication mit OpenId Connect • Startup Klasse • Vor den zu schützenden Bereich • Nach der Cookie Authentication
  • 15. Authentication mit OpenId Connect • Challenge selbst veranlassen • Direkt über den AuthenticationManger • Oder bei MVC über ChallengeResult
  • 16. Live Coding OpenId Connect basierte Anmeldung, zusammenspiel von AutomaticChallenge, Cookies und Co.
  • 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. 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. 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. 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. Policy basierte Autorisierung • Definition zur Laufzeit • Eindeutigen Namen • Rollen • Claims • Werte für Claims • Assertions • Haben eine Liste von IAuthorizationRequirement • IAuthorizationRequirementHandler
  • 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
  • 30. Autorisierung mit Resourcen • Via AuthorizationRequirementHandler • oder Policy • Resource-Property im HandlerContext • OperationAuthorizationRequirment oder eigenes
  • 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. IDataProtectionProvider • protectionProvider.CreateProtector(string purpose) • protector.Protect() • protector.Unprotect() • protector.CreateProtector()
  • 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. Secrets • Zugangsdaten • ConnectionStrings • ClientId, ClientSecrets • Username, Password • usw. • Haben nichts im Quelltext verloren
  • 35. User Secrets verwenden Startup.cs project.json %APPDATA%MicrosoftUserSecrets{userSecretsId}secrets.json ~/.microsoft/usersecrets/{userSecretsId}/secrets.json
  • 36. Secret Manager CLI • dotnet user-secrets • dotnet restore nicht vergessen Commands • list • set • remove • clear
  • 37. Cookie Policy • Cookie Defaults für alle Cookies • HttpOnly und Secure, sehr einfach • CallBacks für weitere Einstellungen • Nuget: Microsoft.AspNetCore.CookiePolicy
  • 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. 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. 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

Editor's Notes

  1. Claims sind einfach eigenschaft ClaimsPrincial nicht angekommen In ASP.NET Core erstmal ein first Class Citizen
  2. ASP.NET Core auf einer Seite Alles in ASP.NET Core eine Middle das Routing die Authosierung und eben auch MVC
  3. Noch andere Methoden Der Name der Schema ist wichtig, Die Aktionen sind Schemen bezogen
  4. DataProtection Nichts ist so einfach wie unsichere Cookies,
  5. OpenId Connect
  6. Wie die Cookie A