Autorisierung und Authentifizierung in Microserviceumgebungen

48
Autorisierung und Authentifizierung in Microserviceumgebungen Bernd Schönbach, Bonn Agile Meetup 2. Mai 2017

Transcript of Autorisierung und Authentifizierung in Microserviceumgebungen

Page 1: Autorisierung und Authentifizierung in Microserviceumgebungen

Autorisierung  und  Authentifizierung  in  Microserviceumgebungen

Bernd  Schönbach,  Bonn  Agile  Meetup 2.  Mai  2017

Page 2: Autorisierung und Authentifizierung in Microserviceumgebungen

Ü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

Page 3: Autorisierung und Authentifizierung in Microserviceumgebungen

Was ist das Problem?

Page 4: Autorisierung und Authentifizierung in Microserviceumgebungen

Was ist das Problem?

4Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX

Page 5: Autorisierung und Authentifizierung in Microserviceumgebungen

Was ist das Problem?

5Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX

Page 6: Autorisierung und Authentifizierung in Microserviceumgebungen

Was ist das Problem?

6Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX

Page 7: Autorisierung und Authentifizierung in Microserviceumgebungen

Was ist das Problem?

7Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX

Page 8: Autorisierung und Authentifizierung in Microserviceumgebungen

Und wie helfen uns jetzt JSON Web Tokens dabei?

Page 9: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 10: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 11: Autorisierung und Authentifizierung in Microserviceumgebungen

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  

Page 12: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 13: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 14: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 15: Autorisierung und Authentifizierung in Microserviceumgebungen

Was sind nun also JSON Web Tokens?

Page 16: Autorisierung und Authentifizierung in Microserviceumgebungen

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.”

Page 17: Autorisierung und Authentifizierung in Microserviceumgebungen

Was sind JSON Web Tokens (JWT)?

17Autorisierung und Authentifizierung in Microserviceumgebungen – Bonn Agile 2017 – Bernd Schönbach – LeanIX

Page 18: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 19: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 20: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 21: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 22: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 23: Autorisierung und Authentifizierung in Microserviceumgebungen

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)

Page 24: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 25: Autorisierung und Authentifizierung in Microserviceumgebungen

Beispiele

Page 26: Autorisierung und Authentifizierung in Microserviceumgebungen

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();

}

Page 27: Autorisierung und Authentifizierung in Microserviceumgebungen

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/

Page 28: Autorisierung und Authentifizierung in Microserviceumgebungen

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

){[…]

}

Page 29: Autorisierung und Authentifizierung in Microserviceumgebungen

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• …

Page 30: Autorisierung und Authentifizierung in Microserviceumgebungen

Kleiner Vergleich zwischen JWS und JWE

vs

Page 31: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 32: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 33: Autorisierung und Authentifizierung in Microserviceumgebungen

Shared Secret vs.

Private/Public Key

Page 34: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 35: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 36: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 37: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 38: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 39: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 40: Autorisierung und Authentifizierung in Microserviceumgebungen

Mind the gap

Page 41: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 42: Autorisierung und Authentifizierung in Microserviceumgebungen

Kritische Betrachtung

Page 43: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 44: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 45: Autorisierung und Authentifizierung in Microserviceumgebungen

Zusammenfassung

Page 46: Autorisierung und Authentifizierung in Microserviceumgebungen

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

Page 47: Autorisierung und Authentifizierung in Microserviceumgebungen

Danke(and yes we are hiring)

https://www.leanix.net/de/jobs

Page 48: Autorisierung und Authentifizierung in Microserviceumgebungen

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/