YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: CIS14: I Left My JWT in San JOSE

`` Brian Campbell!

@__b_c!Cloud Identity Summit 2014!

http://www.slideshare.net/briandavidcampbell! !

A technical overview of JSON Web Token (JWT) and JavaScript Object

Signing and Encryption (JOSE)!

Page 2: CIS14: I Left My JWT in San JOSE

Introductions!

http://blog.talkingidentity.com/2013/08/thanking-the-iam-venn-erables-in-my-own-way.html!

Me!

Page 3: CIS14: I Left My JWT in San JOSE

More Introductions…!

Copyright © 2014 Ping Identity Corp. All rights reserved. 3 https://twitter.com/itickr/status/354999490928857088!

https://flic.kr/p/f6PKjB!

Page 4: CIS14: I Left My JWT in San JOSE

•  JavaScript Object Signing and Encryption (JOSE)

–  JSON Web Signature (JWS)

•  A way of representing content secured with a digital signature or MAC using JSON data structures and base64url encoding

–  JSON Web Encryption (JWE)

•  Like JWS but for encrypting content

–  JSON Web Key (JWK)

•  JSON data structures representing cryptographic keys

–  JSON Web Algorithms

•  Defines the use cryptographic algorithms and identifiers for JWS, JWE and JWK !

•  JSON Web Token (JWT)

–  A compact URL-safe means of representing claims/attributes to be transferred between two parties

–  A JWT is a JWS and/or a JWE with JSON claims as the payload Copyright © 2014 Ping Identity Corp. All rights reserved. 4

JWT + JOSE Overview!

JWS JWE

JWT

JWK

JSON

Page 5: CIS14: I Left My JWT in San JOSE

•  Not even official RFCs yet but –  Well regarded

–  And widely used: •  OAuth

•  OpenID Connect

•  Mozilla Persona (ahem)

•  W3C Web Cryptography API

•  + more… Three nerds holding a blurry piece of paper they tell me is

some kind of award for the JOSE & JWT work.

http://www.kuppingercole.com/article/award2014 !

5

JWT + JOSE in the Wild!

Page 6: CIS14: I Left My JWT in San JOSE

What’s in a Name?!

https://twitter.com/metadaddy/status/454422069199900672

JW*!

Page 7: CIS14: I Left My JWT in San JOSE

Copyright © 2014 Ping Identity Corp. All rights reserved. 7

But you wouldn't name your child ‘Attila the Hun’ would you?!

"Attila, Scourge of God" http://en.wikipedia.org/wiki/File:Atilla_fl%C3%A9au_de_dieu.jpg

I didn’t…

Page 8: CIS14: I Left My JWT in San JOSE

What would JOSE do? ‡ !

Call it

JW-STEAK

‡ I reluctantly credit Paul Madsen with WWJD. Unless you are offended by it, in which case I’m not at all reluctant about blaming him. JW-

JWS JWT JWE JWA JWK

Page 9: CIS14: I Left My JWT in San JOSE

Because who doesn’t like a good steak? !

Don Julio is a famous (to gringo tourists anyway) steakhouse in Buenos Aires, Argentina - https://flic.kr/p/ezE99U

Page 10: CIS14: I Left My JWT in San JOSE

Okay, fine…!

• Technically speaking, my vegan coworker does not like steak

• Even if it is ‘good’ • But let’s not split hairs on this

one…

Copyright © 2014 Ping Identity Corp. All rights reserved. 10

Page 11: CIS14: I Left My JWT in San JOSE

Awkward Transition… into some of the more technical details!

11

Few things are more awkward than Paul Madsen

eating a Slim Jim while wearing a sailor's outfit and

bowtie

Page 12: CIS14: I Left My JWT in San JOSE

All The Cool Kids Are Doing It!

Copyright © 2014 Ping Identity Corp. All rights reserved. 12

{"JSON" : "a lightweight & human-readable data-interchange format"}!

Page 13: CIS14: I Left My JWT in San JOSE

The 64 Character Question!•  base64

–  A means of encoding binary data in a printable ASCII string format

–  Each 6 bits -> 1 character

•  From a 64 character alphabet comprised of 62 alphanumeric characters and "+" and "/"

•  Also padding "="

–  3 bytes -> 4 characters

•  base64url

–  uses a URL safe alphabet rather than the nearly URL safe alphabet of regular base64

–  "-" rather than "+" and "_" rather than "/"

–  Padding "=" is typically omitted

•  A remaining unreserved URI character: "."

–  This will prove important shortly

Copyright © 2014 Ping Identity Corp. All rights reserved. 13

Example: 32 random bytes encoded

base64: qOo+pY+LPDB7sA2nuMp4TzmCThieol/J+bAXqcB8pAU=base64url: qOo-pY-LPDB7sA2nuMp4TzmCThieol_J-bAXqcB8pAUURL Encoded:qOo%2BpY%2BLPDB7sA2nuMp4TzmCThieol%2FJ%2BbAXqcB8pAU%3DqOo-pY-LPDB7sA2nuMp4TzmCThieol_J-bAXqcB8pAU

Page 14: CIS14: I Left My JWT in San JOSE

A closer look at JOSE’s bits and pieces: JWS!

•  JSON Web Signature (JWS) •  A way of representing content secured with a digital signature

or MAC –  Using a JSON data structure and base64url encoding –  Encoded segments are concatenated with a "." –  Intended for space constrained environments such as HTTP

Authorization headers and URI query parameters

•  Conceptually Simple: –  <Header>.<Payload>.<Signature>

Copyright © 2014 Ping Identity Corp. All rights reserved. 14

Page 15: CIS14: I Left My JWT in San JOSE

JOSE’s bits and pieces: The JWS Header!•  JWS Header is a bit of JSON that describes the digital signature or MAC operation applied

to create the JWS Signature value

•  Reserved Header Parameters –  "alg": Algorithm

–  HMAC, RSA, RSA-PSS and ECDSA

–  Unsigned/none (controversy!)

–  Extensible

•  "kid": Key ID

•  "jku": JWK Set URL

•  "jwk": JSON Web Key

•  "x5u": X.509 URL

•  "x5t": X.509 Thumbprint

•  "x5c": X.509 Certificate Chain

•  "typ": Type

•  "cty": Content Type Copyright © 2014 Ping Identity Corp. All rights reserved. 15

Header Example:

"I signed this thing with RSA-SHA256 using key we known as ‘9er’ which you

can find the corresponding public key for at https://www.example.com/jwks"

{"alg":"RS256", "kid":"9er",

"jku":"https://www.example.com/jwks"}

Page 16: CIS14: I Left My JWT in San JOSE

JOSE’s bits and pieces: JWS Algorithms!

Copyright © 2014 Ping Identity Corp. All rights reserved. 16

Digital Signature or Message Authentication Code Algorithm!

JWS "alg" Parameter Values!

HMAC using SHA2! HS256, HS384 and HS512!

RSASSA-PKCS1-V1_5 Digital Signatures with with SHA2!

RS256, RS384 and RS512!

Elliptic Curve Digital Signatures (ECDSA) with SHA2! ES256, ES384 and ES512!!

RSASSA-PSS Digital Signatures with SHA2! PS256, PS384 and PS512!!

Unsigned Plaintext! none!

Page 17: CIS14: I Left My JWT in San JOSE

USA!&!

Canada

vs.

a little context…

Page 18: CIS14: I Left My JWT in San JOSE

Jingoistic JWS Example!Payload -> USA #1! base64url encoded payload -> VVNBICMxIQ Header (going to sign with ECDSA P-256 SHA-256 via "my-first-key") ->

{"alg":"ES256","kid":"my-first-key"} base64url encoded header ->

eyJhbGciOiJFUzI1NiIsImtpZCI6Im15LWZpcnN0LWtleSJ9 Secured Input ->

eyJhbGciOiJFUzI1NiIsImtpZCI6Im15LWZpcnN0LWtleSJ9.VVNBICMxIQ base64url encoded signature over the Secured Input ->

QJGB_sHj-w3yCBunJs2wxKgvZgG2Hq9PA- TDQEbNdTm2Wnj2sUSrBKZJAUREzF1FF25BbrgyohbKdGE1cB-hrA

JWS Compact Serialization (line breaks after dots added for readability) ->

eyJhbGciOiJFUzI1NiIsImtpZCI6Im15LWZpcnN0LWtleSJ9. VVNBICMxIQ. QJGB_sHj-w3yCBunJs2wxKgvZgG2Hq9PA- TDQEbNdTm2Wnj2sUSrBKZJAUREzF1FF25BbrgyohbKdGE1cB-hrA

Which you can think of sort of like:

{"alg":"ES256","kid":"my-first-key"}."USA #1!".<SIGNATURE>

Page 19: CIS14: I Left My JWT in San JOSE

JOSE’s bits and pieces: JWE!

•  JSON Web Encryption

•  Similar in motivation and design to JWS but for encrypting content

•  A little more complicated

–  Headers

•  "alg": Algorithm (key wrap or agreement)

•  "enc": Encryption Method (Authenticated Encryption only)

•  "zip": Compression Algorithm

–  "DEF" for the DEFLATE Compressed Data Format from RFC 1951 is currently the only one

•  "kid”, “jku”, “jwk”, "x5u”, "x5t”, "x5c”, etc..

•  Five Parts

<Header>.<EncryptedKey>.<InitializationVector>.<Ciphertext>.<AuthenticationTag>

Copyright © 2014 Ping Identity Corp. All rights reserved. 19

Page 20: CIS14: I Left My JWT in San JOSE

JOSE’s bits and pieces: !JWE Content Encryption Algorithms ("enc")!

Copyright © 2014 Ping Identity Corp. All rights reserved. 20

Content Encryption Algorithm! JWE "enc" Parameter Values!Authenticated encryption with Advanced Encryption Standard (AES) in Galois/Counter Mode (GCM)!

A128GCM, A192GCM and A256GCM!

Authenticated encryption with an AES-CBC and HMAC-SHA2 composite !

A128CBC-HS256, A192CBC-HS384 and A256CBC-HS512!

Page 21: CIS14: I Left My JWT in San JOSE

JOSE’s bits and pieces: !JWE Key Management Algorithms ("alg")!

Copyright © 2014 Ping Identity Corp. All rights reserved. 21

Key Management Algorithm! JWE "alg" Parameter Values!Direct encryption with a shared symmetric key! dir!

RSAES-PKCS1-V1_5 key encryption! RSA1_5!

RSAES using OAEP key encryption! RSA-OAEP and RSA-OAEP-256!

AES key wrap! A128KW, A192KW and A256KW!

AES GCM key encryption! A128GCMKW, A192GCMKW and A256GCMKW!

Elliptic Curve Diffie-Hellman Ephemeral Static key agreement using Concat KDF!

ECDH-ES!

Elliptic Curve Diffie-Hellman Ephemeral Static key agreement using Concat KDF with AES key wrap!

ECDH-ES+A128KW, ECDH-ES+A192KW and ECDH-ES+A256KW!

PBES2 with HMAC SHA-2 and AES key wrapping! PBES2-HS256+A128KW, PBES2-HS384+A192KW and PBES2-HS512+A256KW!

Page 22: CIS14: I Left My JWT in San JOSE

Payload/plaintext -> I actually really like Canada Header -> {"kid":"use this one eh","alg":"RSA-OAEP","enc":"A128CBC-HS256"} base64url encode header -> eyJraWQiOiJ1c2UgdGhpcyBvbmUgZWgiLCJhbGciOiJSU0EtT0FFU CIsImVuYyI6IkExMjhDQkMtSFMyNTYifQ IV: base64url encoded 128 bit initialization vector -> OMRMiwPvh13089vcWAw_mg Encrypted Key: RSA OAEP used wrap a 256 bit random key which is base64url encoded -> knTL6DMyEDMIUmE7rmTYPoWAwFmVOTy4ZtbVLToaMG4Q87csv1dg4iTutr8RCVG5gMctMf2aq5fq1O078ndkBRN0MlmFwU6h5pSALNFH7guQpRZmW3h3uZ8FxbL_YbnNQndm12-LzXcXg42FF1i-j7dC6FFk79muv5hyTegp8XO7ss09CgWe0OVH4wWQ0a_pq-thzrMtNxjy4SH8xTeFOfW1zpI_Tlpwk18zubyhqtDraAQ-SULQpDshOYT_PQ8lSYQIq3yDsRQXkr0A3fwQQhYV-FEmanDFA4TvdMaUb6AJ8JZhennuowWqV_jCxpXgbUWyS61MASUg8g0MftuMMQ Ciphertext: base64url encoded AES 128 CBC encrypted payload -> G3UoJsj2jgPTBlmBpDo456jYUTTHnfWIYmpedDgn6Zw Authentication Tag: base64url encoded left truncated SHA-256 HMAC of encoded header, IV and ciphertext -> rCjFpLbuWKQMJLzQEP4aSw JWE Compact Serialization (<Header>.<EncryptedKey>.<InitializationVector>.<Ciphertext>.<AuthenticationTag>) -> eyJraWQiOiJ1c2UgdGhpcyBvbmUgZWgiLCJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhDQkMtSFMyNTYifQ. knTL6DMyEDMIUmE7rmTYPoWAwFmVOTy4ZtbVLToaMG4Q87csv1dg4iTutr8RCVG5gMctMf2aq5fq1O078ndkBRN0MlmFwU6h5pSALNFH7guQpRZmW3h3uZ8FxbL_YbnNQndm12-LzXcXg42FF1i-j7dC6FFk79muv5hyTegp8XO7ss09CgWe0OVH4wWQ0a_pq-thzrMtNxjy4SH8xTeFOfW1zpI_Tlpwk18zubyhqtDraAQ-SULQpDshOYT_PQ8lSYQIq3yDsRQXkr0A3fwQQhYV-FEmanDFA4TvdMaUb6AJ8JZhennuowWqV_jCxpXgbUWyS61MASUg8g0MftuMMQ. OMRMiwPvh13089vcWAw_mg. G3UoJsj2jgPTBlmBpDo456jYUTTHnfWIYmpedDgn6Zw. rCjFpLbuWKQMJLzQEP4aSw

Confessional JWE Example!

Page 23: CIS14: I Left My JWT in San JOSE

An aside, eh. !Looking for material, I started to Google "never trust a Canadian"…

Brian Campbell!@__b_c!

CIS 2014

Page 24: CIS14: I Left My JWT in San JOSE

JWT!

•  JSON Web Token •  Suggested pronunciation: "jot" •  Compact URL-safe means of representing claims to be

transferred between two parties •  JWS and/or JWE with JSON claims as the payload •  JWT Claim

–  A piece of information asserted about a subject (or the JWT itself)

–  Represented name/value pairs, consisting of a Claim Name and a Claim Value (which can be any JSON object)

Copyright © 2014 Ping Identity Corp. All rights reserved. 24

Page 25: CIS14: I Left My JWT in San JOSE

•  "iss": Issuer –  Who issued it

•  "sub": Subject –  Who’s it about

•  "aud": Audience –  Who’s it for

•  "exp": Expiration Time –  When it expires

•  "nbf": Not Before –  When it starts being value

•  "iat": Issued At –  When it was issued

•  "jti": JWT ID –  A unique identifier for it

Copyright © 2014 Ping Identity Corp. All rights reserved. 25

(some) Reserved JWT Claim Names!

Page 26: CIS14: I Left My JWT in San JOSE

jot or not?!

Copyright © 2014 Ping Identity Corp. All rights reserved. 26

The  JWT  eyJraWQiOiI1IiwiYWxnIjoiRVMyNTYifQ.eyJpc3MiOiJodHRwczpcL1wvaWRwLmV4YW1wbGUuY29tIiwKImV4cCI6MTM1NzI1NTc4OCwKImF1ZCI6Imh0dHBzOlwvXC9zcC5leGFtcGxlLm9yZyIsCiJqdGkiOiJ0bVl2WVZVMng4THZONzJCNVFfRWFjSC5fNUEiLAoiYWNyIjoiMiIsCiJzdWIiOiJCcmlhbiJ9.

The  Header  {"kid":"5","alg":"ES256"}  

The  Payload  {"iss":"https:\/\/idp.example.com",  "exp":1357255788,  "aud":"https:\/\/sp.example.org",  "jti":"tmYvYVU2x8LvN72B5Q_EacH._5A",  "acr":"2",  "sub":"Brian"}  

Page 27: CIS14: I Left My JWT in San JOSE

it’s not the size of your token…!

Copyright © 2014 Ping Identity Corp. All rights reserved. 27

eyJraWQiOiI1IiwiYWxnIjoiRVMyNTYifQ.eyJpc3MiOiJodHRwczpcL1wvaWRwLmV4YW1wbGUuY29tIiwKImV4cCI6MTM1NzI1NTc4OCwKImF1ZCI6Imh0dHBzOlwvXC9zcC5leGFtcGxlLm9yZyIsCiJqdGkiOiJ0bVl2WVZVMng4THZONzJCNVFfRWFjSC5fNUEiLAoiYWNyIjoiMiIsCiJzdWIiOiJCcmlhbiJ9.SbPJIx_JSRM1wluioY0SvfykKWK_yK4LO0BKBiESHu0GUGwikgC8iPrv8qnVkIK1aljVMXcbgYnZixZJ5UOArg    <Assertion  Version="2.0"  IssueInstant="2013-­‐01-­‐03T23:34:38.546Z"  ID="oPm.DxOqT3ZZi83IwuVr3x83xlr"      xmlns="urn:oasis:names:tc:SAML:2.0:assertion"  xmlns:ds="http://www.w3.org/2000/09/xmldsig#">      <Issuer>https://idp.example.com</Issuer>      <ds:Signature><ds:SignedInfo>              <ds:CanonicalizationMethod  Algorithm="http://www.w3.org/2001/10/xml-­‐exc-­‐c14n#"/>              <ds:SignatureMethod  Algorithm="http://www.w3.org/2001/04/xmldsig-­‐more#ecdsa-­‐sha256"/>              <ds:Reference  URI="#oPm.DxOqT3ZZi83IwuVr3x83xlr">                  <ds:Transforms><ds:Transform  Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-­‐signature"/>                      <ds:Transform  Algorithm="http://www.w3.org/2001/10/xml-­‐exc-­‐c14n#"/></ds:Transforms>                  <ds:DigestMethod  Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>                  <ds:DigestValue>8JT03jjlsqBgXhStxmDhs2zlCPsgMkMTC1lIK9g7e0o=</ds:DigestValue>              </ds:Reference></ds:SignedInfo>          <ds:SignatureValue>SAXf8eCmTjuhV742blyvLvVumZJ+TqiG3eMsRDUQU8RnNSspZzNJ8MOUwffkT6kvAR3BXeVzob5p08jsb99UJQ==</ds:SignatureValue>      </ds:Signature>      <Subject>          <NameID  Format="urn:oasis:names:tc:SAML:1.1:nameid-­‐format:unspecified">Brian</NameID>          <SubjectConfirmation  Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">              <SubjectConfirmationData  NotOnOrAfter="2013-­‐01-­‐03T23:39:38.552Z"  Recipient="https://sp.example.org"/>          </SubjectConfirmation>      </Subject>      <Conditions  NotOnOrAfter="2013-­‐01-­‐03T23:39:38.552Z"  NotBefore="2013-­‐01-­‐03T23:29:38.552Z">          <AudienceRestriction><Audience>https://sp.example.org</Audience></AudienceRestriction>      </Conditions>      <AuthnStatement  AuthnInstant="2013-­‐01-­‐03T23:34:38.483Z"  SessionIndex="oPm.DxOqT3ZZi83IwuVr3x83xlr">          <AuthnContext><AuthnContextClassRef>2</AuthnContextClassRef></AuthnContext>      </AuthnStatement>  </Assertion>    

Page 28: CIS14: I Left My JWT in San JOSE

…it’s how you use it!

•  Simpler = Better •  Web safe encoding w/ no canonicalization

(Because canonicalization is a four letter word*)

•  Improved Interoperability & (hopefully) More Secure

•  Eliminates entire classes of attacks –  XSLT Transform DOS, Remote Code Execution, and Bypass

–  C14N Hash Collision w/ & w/out comments

–  Entity Expansion Attacks

–  XPath Transform DOS and Bypass

–  External Reference DOS

–  Signature Wrapping Attacks

Copyright © 2014 Ping Identity Corp. All rights reserved. 28

Brad Hill, pictured here speaking at CIS in 2011, is wicked smaht and published some of these attacks

* especially when you spell it c14n

Page 29: CIS14: I Left My JWT in San JOSE

JSON Web Key (JWK)!

Copyright © 2014 Ping Identity Corp. All rights reserved. 29

•  JSON data structure representing cryptographic key(s) –  Public/private keys: RSA & Elliptic Curve

–  Symmetric keys (octet sequence)

•  Can can be –  included in a JWS/JWE/JWT header

–  published at an HTTPS endpoint and referenced

–  used in place of self signed certificates

–  saved in a file

–  sent in an email

–  and more

Page 30: CIS14: I Left My JWT in San JOSE

JWK & JWT Working Together!

Copyright © 2014 Ping Identity Corp. All rights reserved. 30

JWT/JWS  Header  {    "kid":"5",    "alg":"ES256"  }  

JWK  Set   {"keys":[ {"kty":"EC", "kid":"4", "x":"LX-7aQn7RAx3jDDTioNssbODUfED_6XvZP8NsGzMlRo", "y":"dJbHEoeWzezPYuz6qjKJoRVLks7X8-BJXbewfyoJQ-A", "crv":"P-256"}, {"kty":"EC", "kid":"5", "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", "crv":"P-256"}, {"kty":"EC", "kid":"6", "x":"J8z237wci2YJAzArSdWIj4OgrOCCfuZ18WI77jsiS00", "y":"5tTxvax8aRMMJ4unKdKsV0wcf3pOI3OG771gOa45wBU", "crv":"P-256"} ]}

Page 31: CIS14: I Left My JWT in San JOSE

Simple Is As Simple Does!

• The relative simplicity of JW[STEAK] implies a simple programming interface!

• Numerous implementations already exist for a wide variety of languages/platforms !

• Going to make you take quick look at one of them… !

Copyright © 2014 Ping Identity Corp. All rights reserved. 31

Page 32: CIS14: I Left My JWT in San JOSE

Introducing jose4j!

•  Open source Java implementation of the JOSE specification suite –  https://bitbucket.org/b_c/jose4j

•  Relies solely on the JCA APIs for cryptography •  100% Algorithm Support

•  Production ready –  Used throughout Ping Identity’s products

•  Reference[able] implementation –  Fact checked the JOSE cookbook: http://tools.ietf.org/html/draft-ietf-jose-cookbook-02#appendix-A

•  Completely free of NSA backdoors –  (but I’m open to "sponsorship" opportunities)

Copyright © 2014 Ping Identity Corp. All rights reserved. 32

Page 33: CIS14: I Left My JWT in San JOSE

Producing the aforementioned JWS !

Copyright © 2014 Ping Identity Corp. All rights reserved. 33

PublicJsonWebKey jwk = EcJwkGenerator.generateJwk(EllipticCurves.P256);!jwk.setKeyId("my-first-key");!!JsonWebSignature jws = new JsonWebSignature();!jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.ECDSA_USING_P256_CURVE_AND_SHA256);!jws.setPayload("USA #1!");!jws.setKey(jwk.getPrivateKey());!jws.setKeyIdHeaderValue(jwk.getKeyId());!String compactSerialization = jws.getCompactSerialization();!!System.out.println(compactSerialization);!!

Page 34: CIS14: I Left My JWT in San JOSE

Consuming that JWS!

Copyright © 2014 Ping Identity Corp. All rights reserved. 34

JsonWebKey jwk = JsonWebKey.Factory.newJwk("{\"kty\":\"EC\"," +! "\"kid\":\"my-first-key\"," +! "\"x\":\"xlKTWTx76fl9OZou4LHpDc3oHLC_vm-db7mdsFvO1JQ\"," +! "\"y\":\"3jXBG649Uqf7pf8RHO_jcJ8Jrhy23hjD933i6QEVNkk\"," +! "\"crv\":\"P-256\"}");!!String compactSerialization = ! "eyJhbGciOiJFUzI1NiIsImtpZCI6Im15LWZpcnN0LWtleSJ9." +! "VVNBICMxIQ." +! "QJGB_sHj-w3yCBunJs2wxKgvZgG2Hq9PA-TDQEbNdTm2Wnj2sUSrBKZJAU" + ! "REzF1FF25BbrgyohbKdGE1cB-hrA";!!JsonWebSignature jws = new JsonWebSignature();!jws.setCompactSerialization(compactSerialization);!jws.setKey(jwk.getKey());!String payload = jws.getPayload();!!System.out.println(payload);!!

Page 35: CIS14: I Left My JWT in San JOSE

Producing the aforementioned JWE !

Copyright © 2014 Ping Identity Corp. All rights reserved. 35

String jwkJson =! "{\"kty\":\"RSA\"," +! "\"kid\":\"use this one eh\"," +! "\"n\":\"y2wxwth07jctadDYgWr1gagmtGvi0iImK-aXYq7Z_rvQ0WsmMyb7JIZJg5Q6lbzL-FZUebxmAEBkT1q5QTR5X"+! "vT8bQO39k34s-kXywnWtEBwnI6Z1rmyzFdQMF5oD-6IWSHlQS0yntNHIZSTD75HAn8Ar5RAlkSRvnsxUyqrbAfKBKXxtr" +! "GJdXxQEgDE7Wg1YYi0yrKsiO-Dua_uPkvks7vqhfvaOjymJES-zBs36VGP6BFsVAPwft9Si3PejTIOR-OvKRSwZV" +! "C5b61R37akzTB3abdAIBf4-UBLrvNgl0AXiwH4pYPz0mQUt0UYykALp-pswr5hS4S-rigRnfl7Dw\"," +! "\"e\":\"AQAB\"}";!!JsonWebKey jwk = JsonWebKey.Factory.newJwk(jwkJson);!!JsonWebEncryption jwe = new JsonWebEncryption();!jwe.setPayload("I actually really like Canada");!jwe.setKey(jwk.getKey());!jwe.setKeyIdHeaderValue(jwk.getKeyId());!jwe.setAlgorithmHeaderValue(KeyManagementAlgorithmIdentifiers.RSA_OAEP);! jwe.setEncryptionMethodHeaderParameter(ContentEncryptionAlgorithmIdentifiers.AES_128_CBC_HMAC_SHA_256);!String compactSerialization = jwe.getCompactSerialization();!!System.out.println(compactSerialization); !!

Page 36: CIS14: I Left My JWT in San JOSE

Consuming that JWE (1 of 2) !

Copyright © 2014 Ping Identity Corp. All rights reserved. 36

String jwkJson =! "{\"kty\":\"RSA\"," +! "\"kid\":\"use this one eh\"," +! "\"n\":\"y2wxwth07jctadDYgWr1gagmtGvi0iImK-aXYq7Z_rvQ0WsmMyb7JIZJg5Q6lbzL-FZUebxmAEBkT1q5QTR5XvT8bQO39k3" +! "4s-kXywnWtEBwnI6Z1rmyzFdQMF5oD-6IWSHlQS0yntNHIZSTD75HAn8Ar5RAlkSRvnsxUyqrbAfKBKXxtrGJdXxQEgDE7Wg1YYi0" +! "yrKsiO-Dua_uPkvks7vqhfvaOjymJES-zBs36VGP6BFsVAPwft9Si3PejTIOR-OvKRSwZVC5b61R37akzTB3abdAIBf4-UBLrvNgl" +! "0AXiwH4pYPz0mQUt0UYykALp-pswr5hS4S-rigRnfl7Dw\"," +! "\"e\":\"AQAB\"," +! "\"d\":\"p1umPOWUnf-rTylRVnhG75sF7N3tyG_r86ZM2hV8qAShMgnzbZYefNg2Vxh2cobXUMLF0TncuUxAusCrNSgUyrjHjHDIws03" +! "VdzphFPd3oI9o6_2hSBWJ6OWB5VEDAd1Cc_HKy4iPWUZWlk__G3RQg524_0Wfgp_1bTIyeGLEt6GGAasCRoi4crZ_cKLkzB3ZmwoIF" +! "X4Z-jU6AKp_rCarj45tqdgpzIHKYuA2HjgGJwevknhTVEjY6stAiTXWJ4M8YxIwqQ-tCj1GM5pfvJNIzaW2KoZ234ll_DFnUDnAE1R" +! "O22oBfW-iYsHcrNtslHxYDkGnOGFkJAOnbF8ihaQcQ\",\"p\":\"6JVJlrObtg02Sr0ZqERiOZMxf3lE8TK8j5cU5VBYYvfebtjI2" +! "_wW_uT_N_wIETodgWJgkPlejrQM4B-inB8VfUPBe8RCRGmXf5jqyKf7r5XwGabda3UjaTwoAUxYSgb2HH4IU4KNMJ-rFuG2Nzz0t2W" +! "7PtqHJjrcF3i952oKAGU\",\"q\":\"3-dPMaO1JerkElaP4FMV1Fio-ZFJwf5xCLMFdJZstLkKY7H63bxOb77iQ5xEOSWY4yScfXZ" +! "hp2S1v0Plub-qTeuGHXt-T2rugGAmIKlPzkQU6aiGFXqwCK2TrETQkV5Pf__PRHhaJ1rTbGVyAvqL2vAoI46XwSMmLINncDy2xGM\"," +! "\"dp\":\"T9bXYQ0cuZzFc1iAkzuOQFdf2XNmkCmrgtsJCELRZH_T8lcmdCWQO0WeurggiNFbSYvcvEduByyVcuZJKrCc7tgwde0EFn" +! "ns0JdMmT7Y7ghZWGTogze9xSUqUm_Dqv3CxDsbXpdlIjjdQUiQBVw-YSph4YygciYoYUJIZkUHU-U\"," +! "\"dq\":\"wklQ6t4HPlPIfDEov5rZAl28onJz8iX7p3TQcw5kXZ2DambyLJ5N4aFdbRWYDY6WT-Ng921V5474NnOQT9IE0YBh7AtQ21E" +! "Ki9LiwsyoN2_URby6PMEtJxqXXZCI-ts_WO58yAk3EZc6hoCwoe0Olnh2HASLokgBw_ZyN243mck\"," +! "\"qi\":\"4n-fctilEl81ig_NIa0GFHjV1wiMR5E9RuwJIrSnG6kDBZp2wxjRd8HY96xAC_mwKZzRLxHZnukLaSi4f43-wRuURQaIj8z" +! "P8UFgH73C4sOp9rgRhsUlceniIasGE-3FKW0_2ofNMCNimYuSSIXfIyNvMdtptlg3BJv4gizH_l4\"}";!

Page 37: CIS14: I Left My JWT in San JOSE

Consuming that JWE (2 of 2) !

Copyright © 2014 Ping Identity Corp. All rights reserved. 37

String jwecs = ! "eyJraWQiOiJ1c2UgdGhpcyBvbmUgZWgiLCJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhDQkMtSFMyNTYifQ." + ! "knTL6DMyEDMIUmE7rmTYPoWAwFmVOTy4ZtbVLToaMG4Q87csv1dg4iTutr8RCVG5gMctMf2aq5fq1O078ndkBRN0M" + ! "lmFwU6h5pSALNFH7guQpRZmW3h3uZ8FxbL_YbnNQndm12-LzXcXg42FF1i-j7dC6FFk79muv5hyTegp8XO7ss09CgWe0OVH4" +! "wWQ0a_pq-thzrMtNxjy4SH8xTeFOfW1zpI_Tlpwk18zubyhqtDraAQ-SULQpDshOYT_PQ8lSYQIq3yDsRQXkr0A3fwQQhY" + ! "V-FEmanDFA4TvdMaUb6AJ8JZhennuowWqV_jCxpXgbUWyS61MASUg8g0MftuMMQ." +! "OMRMiwPvh13089vcWAw_mg." +! "G3UoJsj2jgPTBlmBpDo456jYUTTHnfWIYmpedDgn6Zw." +! "rCjFpLbuWKQMJLzQEP4aSw";!!PublicJsonWebKey jwk = PublicJsonWebKey.Factory.newPublicJwk(jwkJson);!!JsonWebEncryption jwe = new JsonWebEncryption();!jwe.setCompactSerialization(jwecs);!jwe.setKey(jwk.getPrivateKey());!String payload = jwe.getPayload();!!System.out.println(payload);!!

Page 38: CIS14: I Left My JWT in San JOSE

Are we finished yet?!

38

Page 39: CIS14: I Left My JWT in San JOSE

Yes, finished. See you at Boot Camp (maybe).!

Thank you!!!!!!!!!!!

Brian Campbell!@__b_c!

CIS 2014 !

https://flic.kr/p/f7zK1V!


Related Documents