Autorisierung und Authentifizierung in Microserviceumgebungen

Post on 23-Jan-2018

169 views 4 download

Transcript of Autorisierung und Authentifizierung in Microserviceumgebungen

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/