The document provides a comprehensive guide on modern API security using JSON Web Tokens (JWT), detailing their benefits over traditional authentication systems and the structure of JWT including its header, payload, and signature. It explains the differences between symmetric and asymmetric algorithms, and offers practical examples of generating, signing, and verifying JWTs. Additionally, it discusses preventing replay attacks and the integration of JWT with OAuth 2.0 for authentication and authorization purposes.
Modern API Securitywith! JSON Web Tokens! Jonathan LeBlanc ! Twitter: @jcleblanc ! Book: http://bit.ly/iddatasecurity!
2.
JSON Web Token(JWT) Specification! ! https://tools.ietf.org/html/rfc7519!
3.
JWT Benefits! ! They’re selfcontained and help maintain a stateless architecture.! ! They maintain a small footprint and can be passed along easily. ! ! They work well across multiple programming languages.!
User logs in,server checks creds Session stored in sever, cookie created Send session data to access endpoints Traditional Authentication Systems
6.
Issues with traditionalsystems! • Sessions: Record needs to be stored on server ! • Scalability: With sessions in memory, load increases drastically in a distributed system.! • CORS: When using multiple devices grabbing data via AJAX requests, we may run into forbidden requests.! • CSRF Attacks: Riding session data to send commands to server from a browser that is trusted via session.!
7.
User logs in,server checks creds Token generated, store in localStorage Provide token in headers for all reqs Token-Based Authentication Systems
JWT Header! ! alg: Thehashing algorithm to be used.! ! typ: The token type. Should be JWT.!
13.
var header_data ={! alg: 'RSA', ! typ: 'JWT' ! };! Example JWT Header!
14.
Difference between HMACSHA256 and RSA SHA256 hashing algorithms! ! HMAC SHA256: Symmetric key cryptography, single shared private key. Faster, good between trusted parties.! ! RSA SHA256: Asymmetric key cryptography, public / private keys. Slower, good between untrusted parties.!
15.
JWT Payload (Claims)! ! Reserved:Predefined, recommended, interoperable terms. ! ! Public: Customs claims that may be set at will.! ! Private: Agreed upon claims between two parties.!
16.
Reserved Claims! ! iss (issuer):The person that issued the token.! sub (subject) : The subject of the token.! aud (audience) : Audience the token is intended for.! exp (expiration time) : Expiration time of the token.! nbf (not before) : Starting time token is available.! iat (issued at) : When the token was issued.! jti (JWT ID) : Unique identifier for the token. ! !
17.
var payload ={! sub: '4355676',! exp: '1481160294',! jti: '841112',! role: 'admin'! };! Example JWT Payload!
Securing JWTs! ! • Verifysignature before trusting data in the JWT.! • Secure the secret key used for signing. Keys should only be accessible by the issuer and consumer.! • Do not add sensitive data to the JWT. They are signed to protect against manipulation, not encrypted.!
27.
Preventing Replay Attacks! ! Toprevent replay attacks, include the following claims to the JWT payload:! ! • jti (JWT ID): Random or pseudo-random nonce.! • exp (expiration): Time the token expires.! • iat (issued at): Time the token was issued. !
28.
JSON Web Encryption(JWE) Specification! ! https://tools.ietf.org/html/rfc7516 !
Benefits of theSpecification! ! Existing Trust Relationships: If a site has an existing user relationship, that may be used.!
31.
A Bit ofHistory! ! OAuth, OpenID, authorization and authentication!
32.
JSON Web Token(JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants! ! https://tools.ietf.org/pdf/rfc7523.pdf!
33.
"JWT vs OAuth"is a comparison of apples and apple carts! ! JWT: Authentication protocol! OAuth: Distributed authorization framework !
34.
User is forwardedto sign in, grant permissions Code is provided back in URI Request to exchange code for token How the OAuth 2 Process Generally Works Access Token is provided back
35.
POST /token.oauth2 HTTP/1.1! Host:service.example.com! Content-Type: application/x-www-form-urlencoded! ! grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer! &assertion=eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.! eyJpc3Mi[...omitted for brevity...].! J9l-ZhwP[...omitted for brevity...]! Authorization Example OAuth 2 access token request with JWT!
36.
POST /token.oauth2 HTTP/1.1! Host:service.example.com! Content-Type: application/x-www-form-urlencoded! ! grant_type=authorization_code&! code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&! client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt- bearer! client_assertion=eyJhbGciOiJSUzI1NiIsImtpZCI6IjIyIn0.! eyJpc3Mi[...omitted for brevity...].! cC4hiUPo[...omitted for brevity...]! Authentication Example OAuth 2 access token request with JWT!
37.
Validating the JWT! ! • iss (required): Unique issuer identity claim.! • sub (required): Identity the token subject! • Authorization: ID of a valid delegate. ! • Authentication: The OAuth 2 client ID.! • aud (required): Identity of the authorization server, such as the URI endpoint. !
38.
Validating the JWT! ! • exp (required): Expiration to limit the time that the JWT can be used.! • nbf (optional): Time before which token must not be accepted.! • jti (optional): Uniquely identifies the token.! • other claims (optional): Any other claims may be present.!
39.
Validating the JWT! ! • Digitally signed / Message Authentication Code: A valid signature / MAC must be present.! • Valid JWT: Must conform to the makeup of a JWT.!