Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Absichern von Webanwendungen mit OAuth 2 und JBoss Keycloak

Absichern von Webanwendungen mit OAuth 2 und JBoss Keycloak

Mit JBoss Keycloak gibt es eine Open-Source Benutzerverwaltung, die sich über OAuth 2.0 auf einfache Art in die eigene Anwendung integrieren lässt.

Beispielanwendungen im Vortrag zeigen die verschiedenen Integrationsmöglichkeiten: Angefangen von JavaEE- und Spring-Anwendungen über JavaScript-Client-Anwendungen bis hin zu Java-REST-Services.

Alle Funktionen angefangen von der Benutzerregistrierung über die Integration von Google, Facebook, Twitter und LDAP stehen so ohne Programmierung zur Verfügung und können individuell konfiguriert werden. Teilen sich mehrere Anwendungen eine Benutzerverwaltung, so steht ein anwendungsübergreifendes Single-Sign-On und Single-Sign-Out zur Verfügung.

Alexander Schwartz

June 27, 2017
Tweet

More Decks by Alexander Schwartz

Other Decks in Technology

Transcript

  1. .consulting .solutions .partnership
    Absichern von Webanwendungen mit
    OAuth 2 und JBoss Keycloak
    Alexander Schwartz, Principal IT Consultant
    Java User Group Berlin, 27.06.2017

    View full-size slide

  2. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    2
    © msg | Juni 2017 | 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

    View full-size slide

  3. Sponsor und Arbeitgeber – msg systems ag
    © msg | Juni 2017 | JBoss Keycloak | Alexander Schwartz 3
    Gegründet 1980
    Mehr als 6.000 Mitarbeiter
    812 Million € Umsatz 2016
    24 Länder
    19 Städte
    in Deutschland

    View full-size slide

  4. Über mich – Principal IT Consultant @ msg Travel & Logistics
    © msg | Juni 2017 | JBoss Keycloak | Alexander Schwartz 4
    15 Jahre
    Java & Web
    7 Jahre
    PL/SQL
    5 Jahre
    IT Consulting
    3,5 Jahre
    Online-Banking
    1 Frau
    2 Kinder
    546
    Geocaches
    @ahus1de
    7 Jahre
    Online-Kredite

    View full-size slide

  5. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    5
    © msg | Juni 2017 | 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

    View full-size slide

  6. 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 | Juni 2017 | JBoss Keycloak | Alexander Schwartz 6

    View full-size slide

  7. 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 | Juni 2017 | 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
    • …

    View full-size slide

  8. Killerapplikation
    Benutzerverwaltungen haben doch auch schon andere gebaut?
    © msg | Juni 2017 | 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/

    View full-size slide

  9. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    9
    © msg | Juni 2017 | 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

    View full-size slide

  10. Vorstellung JBoss Keycloak
    JBoss Keycloak ist eine Benutzerverwaltung als Service
    © msg | Juni 2017 | 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
    Juni 2017: Version 3.1
    Link:
    http://keycloak.org/

    View full-size slide

  11. Vorstellung JBoss Keycloak
    JBoss Keycloak läuft neben der Anwendung
    © msg | Juni 2017 | 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.

    View full-size slide

  12. Vorstellung JBoss Keycloak
    OAuth 2.0 für Single-Sign-On, OpenID Connect als Erweiterung
    © msg | Juni 2017 | 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

    View full-size slide

  13. Vorstellung JBoss Keycloak
    Access Token als JSON Web Token
    © msg | Juni 2017 | 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/

    View full-size slide

  14. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    14
    © msg | Juni 2017 | 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

    View full-size slide

  15. Absicherung einer JEE Webanwendung
    Keycloak einrichten
    © msg | Juni 2017 | 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

    View full-size slide

  16. Absicherung einer JEE Webanwendung
    Funktionen der Benutzerverwaltung
    © msg | Juni 2017 | 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

    View full-size slide

  17. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    17
    © msg | Juni 2017 | 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

    View full-size slide

  18. Integration externer Authentifizierungsquellen
    Funktionen der Benutzerverwaltung
    © msg | Juni 2017 | 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

    View full-size slide

  19. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    19
    © msg | Juni 2017 | 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

    View full-size slide

  20. Absicherung einer JavaScript Single Page Application
    Registrierung der Single Page Application als separate Anwendung
    © msg | Juni 2017 | 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

    View full-size slide

  21. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    21
    © msg | Juni 2017 | 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

    View full-size slide

  22. Absicherung von REST Services
    Bearer Tokens werden bei jedem Aufruf mitgeschickt
    © msg | Juni 2017 | 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

    View full-size slide

  23. Absicherung von REST Services
    Ablauf Bearer Token
    © msg | Juni 2017 | 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

    View full-size slide

  24. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    24
    © msg | Juni 2017 | 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

    View full-size slide

  25. Ausblick
    Sicherheitsmaßnahmen im Hintergrund
    © msg | Juni 2017 | 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)

    View full-size slide

  26. Plug & Play Benutzerverwaltung mit JBoss Keycloak
    26
    © msg | Juni 2017 | 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

    View full-size slide

  27. Fazit
    Secure all the things!
    © msg | Juni 2017 | 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/

    View full-size slide

  28. Links
    © msg | Juni 2017 | 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

    View full-size slide

  29. .consulting .solutions .partnership
    Alexander Schwartz
    Principal IT Consultant
    +49 171 5625767
    [email protected]
    @ahus1de
    msg systems ag
    Mergenthalerallee 73-75
    65760 Eschborn
    Deutschland
    www.msg-systems.com

    View full-size slide