autorisierung und authentifizierung in microserviceumgebungen
TRANSCRIPT
Autorisierung und Authentifizierung in Microserviceumgebungen
Bernd Schönbach, Bonn Agile Meetup 2. Mai 2017
Überblick
2Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
• Was ist das Problem?
• Und wie helfen uns jetzt JSON Web Tokens dabei?
• Was sind denn jetzt eigentlich diese Tokens?
• Beispiele
• Mind the gap
• JWS vs. JWE
• Kritische Betrachtung
Was ist das Problem?
Was ist das Problem?
4Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Was ist das Problem?
5Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Was ist das Problem?
6Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Was ist das Problem?
7Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Und wie helfen uns jetzt JSON Web Tokens dabei?
Typischer Auth Flow
9Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
UI
Auth Service
Microservice 2
Microservice 1
Microservice 3
LoginOAuth Token Rückgabe
Requests mit Token
Typischer Auth Flow
10Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
UI
Auth Service
Microservice 2
Microservice 1
Microservice 3
LoginOAuth Token Rückgabe
Prüfe Oauth Validität
Requests mit Token
Typischer Auth Flow
11Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
UI
Auth Service
Microservice 2
Microservice 1
Microservice 3
LoginOAuth Token Rückgabe
Prüfe Oauth Validität
Requests mit Token
AuthService
Und jetzt mit JWT
12Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
UI
Auth Service
Microservice 2
Microservice 1
Microservice 3
Login
JWT wird zurückgegebenSende Requests mit Token
Und jetzt mit JWT
13Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
UI
Auth Service
Microservice 2
Microservice 1
Microservice 3
Login
JWT wird zurückgegeben
Prüfe Token
Sende Requests mit Token
Und jetzt mit JWT
14Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
UI
Auth Service
Microservice 2
Microservice 1
Microservice 3
Login
JWT wird zurückgegeben
Prüfe Token
Sende Requests mit Token
Was sind nun also JSON Web Tokens?
Was sind JSON Web Tokens (JWT)?
16Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
RFC 7519: “JSON Web Token (JWT) is a compact, URL-‐safe means of representing claims to be transferred between two parties.”
Was sind JSON Web Tokens (JWT)?
17Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Was sind JSON Web Tokens (JWT)?
18Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Zwei Varianten
JSON Web Signature JSON Web Encryption
JSON Web Signature (RFC 7515)
19Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Drei Bestandteile
1. Header
2. Payload (Claims)
3. Signatur
JWS - Header
20Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
{
"alg": "HS256",
"typ": "JWT“
}
{
"alg": "HS256",
"typ": "JWT“
}
Bespielwerte:
• HS256• RS256• ES256
Spezialfall:
• none
JWS - Payload
21Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
- Enthält Informationen- Zum Beispiel
- Aussteller (iss)- Ablaufdatum (exp)- Empfänger (sub)- Features- Permissions- …
{ "iss": "auth-service-1","name": "John Doe","admin": true,"exp": 1487325600
}
Bitte so wenig wie nötig mitschicken, um das Token klein zu halten
JWS - Signatur
22Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret
)
• Verifiziert Herausgeber und Inhalt des JWS Token
• Signatur enthält Header und Payload
JWS Beispiel
23Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Header: { "alg": "HS256", "typ": "JWT"}
Payload: {
"sub": "1234567890","name": "John Doe","admin": true
}
Signatur: HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret)
JSON Web Encryption (RFC 7516)
24Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
• Transportiert ähnliche Informationen
• Alle Daten werden verschlüsselt
• Verschlüsselung nutzt Salt, um Erratbarkeit zu minimieren
Beispiele
JWS Erstellung in Java
26Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
public String createJwt(User loggedInUser) {JwtBuilder builder = Jwts.builder().setSubject(loggedInUser.getUsername()).claim(„payload“, loggedInUser.getPayload()).setId(loggedInUser.getId()).setExpiration(calculateExpirationTime());
return builder.signWith(SignatureAlgorithm.RS256, privateKey
).compact();
}
JWS Prüfung in Java
27Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Claims claims = Jwts.parser().setSigningKey(publicKey).parseClaimsJws(accesTokenString).getBody();
Wichtig!:- Überprüfe immer, ob der Erwartete Algorithmus benutzt wird
- “none” alg header darf nicht zu fehlender Prüfung führen!
https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/
JWS Benutzung in Java mit Dropwizard
28Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
@Overridepublic Optional<User> authenticate(String accessToken) {if (accessToken == null)return Optional.absent();
OAuth2Token token = this.parser.parse(accessToken);return Optional.fromNullable((User) token.getPrincipal());
}
Authenticator Klasse anpassen:
@Auth Annotation nutzen:
public Response getX(@Auth @ApiParam(access="internal") User user
){[…]
}
JWS Libraries
29Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Libraries existieren für nahezu alle Programmiersprachen:
• .NET• Pyhton• Node.js• Java• JavaScript• Perl• Ruby• Elixir• Go
• Haskell• Rust• Lua• Scala• D• Clojure• Objective C• Swift• C
• Kdb+/Q• Delphi• PHP• Crystal• …
Kleiner Vergleich zwischen JWS und JWE
vs
JSON Web Encryption (JWE)
31Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
• Der Nutzer kann die Daten nicht lesen
• Man kann potentiell geheime Informationen verschicken
Pros
Cons
• Daten liegen beim Nutzer
• Theoretisch unendlich viel Zeit zum Knacken der Encryption
• Potentiell geheime Informationen werden verschickt
• Erzeugt Gefühl von Sicherheit beim Entwickler
JSON Web Signature (JWS)
32Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
• Alles ist lesbar durch den Nutzer
• Entwickler werden zur Datensparsamkeit “erzogen”
• Debugging ist einfach möglich
Pros
Cons
• Alles ist lesbar durch den Nutzer
• Mögliche Informationen können nicht verschickt werden
Shared Secret vs.
Private/Public Key
Shared Secret Verfahren
34Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Auth Service
Microservice 2
Microservice 1
Microservice 3
Private Key
Shared Secret Verfahren
35Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Auth Service
Microservice 2
Microservice 1
Microservice 3
Private Key
Auth Service
Private/Public Key Verfahren
36Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Microservice 2
Microservice 1
Microservice 3
Private Key
Public Key
Auth Service
Private/Public Key Verfahren
37Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Microservice 2
Microservice 1
Microservice 3
Private Key
Public Key
Auth Service
Private/Public Key Verfahren
38Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Microservice 2
Microservice 1
Microservice 3
Private Key
Public Key
Shared Secret vs. Private/Public Key
39Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Pro Private / Public Key
• Nur der Public Key wird verteilt
• Nur der Auth-Service benötigt deutlich erhöhte Sicherheit
• Wenn der Private Key kompromitiert wird, ist ein einfacher
Schlüsselaustausch möglich
Pro Shared Secret• Nur ein Schlüssel benötigt, der an alle Services verteilt wird
Mind the gap
Mind the gap
41Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Don’ts:• Niemals Passwörter im JWT verschicken
• auch nicht gehasht…• Man hat keine Kontrolle über den Ort des JWT• Token nicht mit dem Auth-Service validieren
Dos:• Immer Token prüfen (checksum)• So viele Daten wie nötig, aber so wenige wie möglich
verschicken
Kritische Betrachtung
Kritik
Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Hauptpunkte des Paragonie Blogposts:
• Fehlerhafte Überprüfung des Headers liegt am Standard
• Vorgegebene Algorithmen für JWE anfällig für Angriffe
43
Kritik
Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
Hauptpunkte der „joepie91's Ramblings“ Posts:
• Sie verbrauchen mehr Platz• Sie sind unsicherer• Man kann individuelle Tokens nicht invalidieren• Daten können veralten• Implementierungen sind nicht „kampferprobt“• Es gibt doch schon Sessions
44
Zusammenfassung
Zusammenfassung
Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
• Erlaubt die lose Kopplung von Microservices
• Sicherer Transfer von Autorisierungs- und Authentifizierungsinformationen
• Anwendungen im Single Sign On Bereich möglich
• Einfach zu implementieren auf Grund der Libraries
46
Danke(and yes we are hiring)
https://www.leanix.net/de/jobs
Quellen
48Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX
• https://tools.ietf.org/html/rfc7519 RFC for JWT
• https://tools.ietf.org/html/rfc7518 RFC for JWA (used in JWS and JWE)• https://jwt.io/• https://www.leanix.net/
• Devil Smiley CC BY 4.0 https://www.creativetail.com
• Weitere Artikel zum Thema JWT:• https://blog.codecentric.de/2016/11/json-web-token-jwt-im-detail/• https://medium.facilelogin.com/jwt-jws-and-jwe-for-not-so-dummies-b63310d201a3
• https://paragonie.com/blog/2017/03/jwt-json-web-tokens-is-bad-standard-that-everyone-should-avoid
• http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/• http://cryto.net/~joepie91/blog/2016/06/19/stop-using-jwt-for-sessions-part-2-why
-your-solution-doesnt-work/