Absichern von Microservices mit OpenID Connect, JWT und JBoss Keycloak

Absichern von Microservices mit OpenID Connect, JWT und JBoss Keycloak

Mit OAuth 2.0 und dem darauf aufbauenden OpenID Connect existiert ein offener Standard für die Authentifikation von Nutzern. Mit JSON Web Tokens (JWT) existiert ein robuster Mechanismus, um Autorisierungsinformationen in REST-Architekturen weiterzugeben. Die Open-Source-Lösung JBoss Keycloak implementiert beide Standards und weitere Funktionen einer Benutzerverwaltung. Sie stellt damit eine gute Möglichkeit dar, Authentifikation und Autorisierung für Microservices umzusetzen.

Beispielanwendungen im Vortrag zeigen die verschiedenen Integrationsmöglichkeiten: Angefangen bei Java-REST-Services über JavaScript-Client-Anwendungen bis hin zur Integration von LDAP und Social Logins.

5f528a3f6814d28b583f31842e3e8d9e?s=128

Alexander Schwartz

October 25, 2017
Tweet

Transcript

  1. .consulting .solutions .partnership Absichern von Microservices mit OpenID Connect, JWT

    und JBoss Keycloak Alexander Schwartz, Principal IT Consultant Heise DevSec 2017 in Heidelberg, 26.10.2017
  2. Plug & Play Benutzerverwaltung mit JBoss Keycloak 2 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  3. Plug & Play Benutzerverwaltung mit JBoss Keycloak 5 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  4. Die Killerapplikation 1. CC0 / https://pixabay.com/de/lotto-lottoschein-schein-gewinn-484782/ CC0 / https://pixabay.com/de/geldschwemme-500-euro-euro-stapel-432688/ Mit

    meiner Lotto-Nummern-Vorhersage mache ich ein Vermögen! © msg | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 6
  5. Killerapplikation 1. CC BY-SA 3.0 "Work life balance rat race"

    by KVDP, Shokunin, Aungkarns https://commons.wikimedia.org/wiki/File:Work_life_balance_rat_race.png Aber: Je mehr Leute zugreifen, desto geringer ist mein Losgewinn! © msg | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 7 Absicherung ist notwendig: • Anmeldeseite • Datenbank für Benutzernamen und Passwörter • Verschlüsselte Speicherung von Passwörtern • Zurücksetzen von Passwörtern • Ändern von Passwörtern • …
  6. Killerapplikation Benutzerverwaltungen haben doch auch schon andere gebaut? © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 8 Es gibt Best Practices für Benutzerverwaltungen: • Open Web Application Security Project (OWASP) hält Cheat Sheets zur Implementierung bereit (Anmeldung, Passwort ändern, Passwort zurücksetzen) • Fertige Benutzerverwaltungen als Framework oder Teil der Anwendung (z. B. Apache Shiro, integriert in z. B. in Grails) • Fertige Benutzerverwaltungen, die über eine Schnittstelle eingebunden werden (z. B. JBoss Keycloak) Links: https://www.owasp.org/index.php/Authentication_Cheat_Sheet http://shiro.apache.org/ http://keycloak.jboss.org/
  7. Plug & Play Benutzerverwaltung mit JBoss Keycloak 9 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  8. Vorstellung JBoss Keycloak JBoss Keycloak ist eine Benutzerverwaltung als Service

    © msg | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 10 • Single Sign On und Single Sign Out für Browser-Anwendungen • Benutzer- und Rollenverwaltung • Account-Management und Admin-GUI • Grafische Anpassung des Account Managements über Themes • Optionale Integration von LDAP/Active Directory und Social Login • Event-Listener für alle Aktionen September 2014: Version 1.0 September 2016: Version 2.2 Juli 2017: Version 3.2 Link: http://keycloak.org/
  9. Vorstellung JBoss Keycloak JBoss Keycloak läuft neben der Anwendung ©

    msg | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 11 1. Aufruf der Anwendung 2. Weiterleitung zu Keycloak zur Anmeldung 3. Rückleitung zur Anwendung 4. Eingabe des Datums und Berechnen der Zahlen (Pfeile zeigen die Navigation des Browsers) Keycloak Lotto Login: _____ Passwort: _____ Zahlen: $?§! Datum: _____ 1. 3. 2. 4.
  10. Vorstellung JBoss Keycloak OAuth 2.0 für Single-Sign-On, OpenID Connect als

    Erweiterung © msg | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 12 Keycloak Lotto Anfrage (nicht angemeldet) Redirect zu Keycloak (mit Client-Informationen) Anfrage (nicht angemeldet) Anmeldemaske Redirect ausführen Antwort Redirect zum Client (mit Authentication Code) Authentication Code, Client-ID & Secret Antwort mit Access Token Refresh Token und und ID Token Anmeldung
  11. Vorstellung JBoss Keycloak Access Token als JSON Web Token ©

    msg | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 13 Access Token (+/- 1500 Bytes): ey###J9.ey####n0.PD###uA Inhalt: { "alg": "RS256" } { "jti": "cd2461###e695c", "exp": 1436725029, "allowed-origins": [], "realm_access": { "roles": [ "create-realm", "admin" ] }, "resource_access": { "my-realm": { "roles": [ "view-realm", "manage-events", "manage-realm", "view-events", "manage-users", "view-users", "view-clients", "manage-clients", ... ] }, }, "name": "Administrator", "preferred_username": "admin" } RSASHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), "-----BEGIN RSA PRIVATE KEY----- MII###Yw== -----END RSA PRIVATE KEY-----" ) Link: http://jwt.io/
  12. Plug & Play Benutzerverwaltung mit JBoss Keycloak 14 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  13. Absicherung einer JEE Webanwendung Keycloak einrichten © msg | Oktober

    2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 15 Keycloak Lotto Login: _____ Passwort: _____ Zahlen: $?§! Datum: _____ • Realm anlegen oder bestehenden Realm benutzen • Anwendung registrieren • Keycloak-Bibliothek einbinden • Keycloak Konfigurationsdatei einbinden • web.xml Konfiguration anpassen Demo Time
  14. Absicherung einer JEE Webanwendung Funktionen der Benutzerverwaltung © msg |

    Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 16 Über Konfiguration können folgende Funktionen aktiviert werden: • Verwaltung von Nutzern und Rollen • Passwort-Policy • Zurücksetzen des Passworts für Administratoren • Zurücksetzen des Passworts durch Nutzer • Passwort vergessen
  15. Plug & Play Benutzerverwaltung mit JBoss Keycloak 17 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  16. Integration externer Authentifizierungsquellen Funktionen der Benutzerverwaltung © msg | Oktober

    2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 18 Über Konfiguration können folgende Funktionen aktiviert werden: • One Time Passwords (OTPs) • Social Login via Facebook, Twitter, etc. • Integration mit LDAP ... und viele mehr Demo Time
  17. Plug & Play Benutzerverwaltung mit JBoss Keycloak 19 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  18. Absicherung einer JavaScript Single Page Application Registrierung der Single Page

    Application als separate Anwendung © msg | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 20 Keycloak Lotto SPA Login: _____ Passwort: _____ Zahlen: $?§! Datum: _____ • Anwendung registrieren mit Access Type „public“ • JavaScript-Bibliothek einbinden • Bei asynchronen Aufrufen Token mitschicken Demo Time
  19. Plug & Play Benutzerverwaltung mit JBoss Keycloak 21 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  20. Absicherung von REST Services Bearer Tokens werden bei jedem Aufruf

    mitgeschickt © msg | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 22 Lotto REST Server Lotto SPA Zahlen: $?§! Datum: _____ • Server ist stateless, da alle Informationen im Token in signierter Form vorhanden sind • Schickt Bearer-Token bei jedem Aufruf mit REST Aufruf mit Bearer Token
  21. Absicherung von REST Services Ablauf Bearer Token © msg |

    Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 23 Keycloak Lotto SPA Anfrage (nicht angemeldet) Redirect zu Keycloak (mit Client-Informationen) Anfrage (nicht angemeldet) Anmeldemaske Redirect ausführen Antwort Redirect zum Client (mit Access, Refresh und ID Token) Asynchroner JavaScript-Aufruf (mit Bearer-Token) Anmeldung Lotto REST Demo Time
  22. Plug & Play Benutzerverwaltung mit JBoss Keycloak 24 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  23. Ausblick Sicherheitsmaßnahmen im Hintergrund © msg | Oktober 2017 |

    Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 25 • Aktualisierung von Tokens bei Bedarf • Erkennung von Brute-Force-Attacken auf dem Keycloak-Server Erweiterungen zu OpenID Connect: • Rückruf von bereits ausgegebenen Token über „not valid before“ • Single-Sign-Out (Serverseitig über Aufruf des Backends von Keycloak aus, beim Single Page Application Frontend über iFrame)
  24. Plug & Play Benutzerverwaltung mit JBoss Keycloak 26 © msg

    | Oktober 2017 | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz Die Killerapplikation 1 Vorstellung von JBoss Keycloak 2 Absicherung einer JEE Webanwendung 3 Integration externer Authentifizierungsquellen 4 Absicherung einer JavaScript Single Page Application 5 Absicherung von REST Services 6 Ausblick 7 Secure all the things! 8
  25. Fazit Secure all the things! © msg | Oktober 2017

    | Absichern von Microservices - JBoss Keycloak | Alexander Schwartz 27 • Keycloak bietet alle Funktionen einer Benutzerverwaltung • Schnittstelle zur Anwendung ist über OAuth 2.0 und Open ID Connect standardisiert • Verschiedene Integrationen sind vorhanden, eigene Integrationen sind möglich • Funktionalität der Benutzerverwaltung wird unabhängig von der Anwendung konfiguriert • Einsatz von Keycloak lohnt sich bereits bei einer Anwendung • Designziel von Keycloak ist, dass es einfach einzusetzen ist @ahus1de ahus1/keycloak-dropwizard-integration http://www.keycloak.org/
  26. Links © msg | Oktober 2017 | Absichern von Microservices

    - JBoss Keycloak | Alexander Schwartz 28 Keycloak http://www.keycloak.org/ Keycloak Dropwizard Integration https://github.com/ahus1/keycloak-dropwizard-integration Easily secure your Spring Boot applications with Keycloak https://developers.redhat.com/blog/2017/05/25/easily-secure-your-spring-boot-applications-with-keycloak/ @ahus1de
  27. .consulting .solutions .partnership Alexander Schwartz Principal IT Consultant +49 171

    5625767 alexander.schwartz@msg-systems.com @ahus1de msg systems ag Mergenthalerallee 73-75 65760 Eschborn Deutschland www.msg-systems.com