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

Jakarta EE Security und Microprofile JWT in Aktion

Jakarta EE Security und Microprofile JWT in Aktion

Sicherheit spielt in modernen, hoch verteilten Enterprise-Anwendungen eine tragende Rolle. Leider sind Security APIs und Bibliotheken zumeist sehr technisch und abstrakt, ihre korrekt Verwendung ist kompliziert und fehleranfällig. Mit Jakarta EE Security und Eclipse Microprofile JWT stehen im Java-Enterprise-Ökosystem nun zwei APIs bereit, um Sicherheitsfunktionen wie Authentication, RBAC oder Token-Based Security einfach umzusetzen.

Dieser Vortrag gibt zunächst einen kompakten Überblick über die relevanten APIs und RFCs für JSON-basierter Signierung und Verschlüsselung (JOSE). Danach zeigen wir die APIs in Aktion und realisieren wichtige Sicherheits-Features für Microservices.

M.-Leander Reimer

October 22, 2020
Tweet

More Decks by M.-Leander Reimer

Other Decks in Programming

Transcript

  1. Jakarta EE Security und Microprofile JWT in Aktion // heise

    devSec() 2020, October 22nd 2020 @LeanderReimer #cloudnativenerd #qaware [email protected]
  2. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware 3 https://github.com/lreimer/jakartaee-jwt-security Code und Beispiele
  3. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware • Security Migration von Java EE 7 Bestandsanwendungen • Austausch proprietärer Auth- Mechanismen durch Jakarta EE Security und OpenID Connect 4 • Heterogene Umgebung mit zahlreichen Security Kontexten • Einführung einer homogenen Layer auf Basis von JSON Web Tokens und Microprofile JWT
  4. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware 5 Jakarta EE und Microprofile Historie EJB 1.0 1998 1999 J2EE v1.0 J2EE v1.2 2000 2001 J2EE v1.3 2003 J2EE v1.4 Java EE 5 2006 Java EE 6 2009 Jakarta EE 8 2019 Java EE 7 2013 Java EE 8 2017 2017 Microprofile 1.1 2019 MP 3.0 2018 MP 2.0 Releases every 3 months 2020 MP 3.3 Jakarta EE 9 8th Dec 2020
  5. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware Overview of Jakarta EE 8 6 JASPIC 1.1
  6. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware Die eine Dependency für Jakarta EE. 7 <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>8.0.0</version> <scope>provided</scope> </dependency>
  7. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware Nutzung expliziter Dependencies für Security API und Referenz Implementierung Soteria. 8 <dependency> <groupId>jakarta.security.enterprise</groupId> <artifactId>jakarta.security.enterprise-api</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>org.glassfish.soteria</groupId> <artifactId>jakarta.security.enterprise</artifactId> <version>1.0.1</version> </dependency>
  8. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware Jakarta EE Security definiert eine einfache, auf Endbenutzer fokussierte API für moderne und sichere Anwendungen. • HttpAuthenticationMechanism • Schnittstelle um Aufrufe einer Web Application zu authentifizieren • 3 Standard Implementierungen: BASIC HTTP Authentication, Form-based und Custom Form-based Authentication •IdentityStore • Schnittstelle um User Credentials zu validieren und Gruppen Informationen bereitzustellen • 2 Standard Implementierungen: Database und LDAP •SecurityContext • Schnittstelle zur direkten Interaktion mit dem aktuellem Security Kontext im Code falls die die Declarative Security nicht ausreicht 9
  9. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware 10 Benutzer OpenID Authorization Endpoint OpenID Token Endpoint OpenID UserInfo Endpoint Server Relying Party 1) Request Login 2) Redirect to OIDC Provider 3) Authentication Request 4) Return Login/Consent Page 5) Enter credentials and authenticate 6) Send Authorization Code via Callback 7) Exchange Authorization Code for Tokens 8) ID and Access Token returned 9) Exchange Access Token for User Claims 10) UserInfo response returned OpenID Connect Flow
  10. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware Demo https://github.com/lreimer/jakartaee-jwt-security 11
  11. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware Microprofile JWT im Detail • Stateless Security für Microservices • Spezifizierte Liste an Pflicht-Claims: typ, alg, kid, iss, sub, aud, iat, exp, jti, upn, groups • Unterstützt ausschließlich RSA-SHA256 basierte digitale Signaturen • Unterstützt JWTs als Bearer Tokens im Authorization HTTP Header • JWTs werden als Authentication Token verwendet, via Issuer und Audience Claim. • JWTs werden als Authorization Token verwendet, via Groups Claim. 13 Non-Goals of Microprofile JWT • JWT Creation Nutzung von API Gateways oder Identity Provider Services (Okta, Auth0) • RSA Public Key Distribution manuelle Verteilung oder Bereitstellung im Docker Image. Nutzung von JSON Web Key Sets. • Automatic JWT Propagation Authorization Header wird nicht automatisch weitergeleitet. Nutzung von MP Rest-Client.
  12. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware Was sind JSON Web Tokens? • JWT ist in offener Standard der IETF spezifiziert unter RFC 7519 • Ein JWT beinhaltet Header, Claims und Signature • Die Claims sind einfach Key/Value Paare. Es gibt Standard Claims. • Die Signature ist zwar optional, sie ermöglicht aber die Verifikation und stellt Fälschungssicherheit sicher 14 eyJhbGciOiJIUzI1NiIsInR5cCI6 IkpXVCJ9.eyJzdWIiOiIxMjM0NTY 3ODkwIiwibmFtZSI6Ik1hcmlvLUx lYW5kZXIgUmVpbWVyIiwidXBuIjo ibWFyaW8tbGVhbmRlci5yZWltZXJ AcWF3YXJlLmRlIiwiaWF0IjoxNTE 2MjM5MDIyLCJleHAiOjE1MTYyMzk wMjIsImlzcyI6Ii9vYXV0aDIvdG9 rZW4iLCJncm91cHMiOlsiQWRtaW5 pc3RyYXRvciIsIkRldmVsb3BlciJ dfQ.mFqC0QQCB3lNgrJ9KWBZi0le OAxuKfy9qO_xCL4HWM4
  13. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware Was sind JSON Web Keys? 15 • JWK ist in offener Standard der IETF spezifiziert unter RFC 7517 • JSON Datenstruktur zur Darstellung Kryptografischer Schlüssel • Über JWK Thumbprint (RFC 7638) können Hashes von JWKs berechnet werden. Nutzung als JWT kid Claim • JSON Web Key Sets sind eine Liste von (öffentlichen) JSON Web Keys, werden für die Verteilung genutzt { "kty":"RSA", „use“:“sig", "alg":"RS256", "kid":"dfghj5678sdfadfasdf678asdfasfasdf", "n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4 ... 0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw", "e":"AQAB", "d":"X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9 M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWYSzUvxT0_YSfqij ... me1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q", "p":"83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPV ... WlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs", "q":"3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyum ... kIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk", "dp":"G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oim ... YZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0", "dq":"s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUU ... GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk", "qi":"GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzg ... yR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU" }
  14. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware 16 DMZ A Shared PaaS Reverse Proxy Reverse Proxy Namespace Bounded Context A API Gateway Reverse Proxy Users 3rd Party Apps Mobile Namespace Security Context Security Gateway Auth Service X Auth Service Y Auth Service Z Service A Service B JWKS Service 3 JWT JWT 5 2 2 1 4 4 1. Proprietary Authentication Token 2. Authorise and swap token to JSON Web Token 3. Propagate Token 4. Verify Token with JSON Web Key Set 5. Propagate Token 6. Like 4. Verify Token with JSON Web Key Set 2 JWK
  15. // heise devSec() 2020 // Jakarta EE Security und Microprofile

    JWT in Aktion // @LeanderReimer #cloudnativenerd #qaware 17 Demo https://github.com/lreimer/jakartaee-jwt-security