A Token Walks Into a Barย ...

SPA

Ado Kukic

Developer Evangelist

Auth0

@kukicado

Ado Kukic

Joel Lord

Developer Evangelist

Auth0

@kukicado

@joel__lord

SPA

ย 

Security Best Practices

@joel__lord

...

@joel__lord

https://avengers.com

User

@joel__lord

https://api.avengers.com

https://app.avengers.com

Avengers

OK Google, Call Tony Stark

@joel__lord

JSON Web Tokens

JWT's (RFC 7519) are an open industry standardย  method for representing claims securely between two parties.

@joel__lord

JSON Web Tokens

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOmZhbHNlfQ.uI_rNanTsZ_wFa1VnICzq2txKeYPArda5QLdVeQYFGI

@joel__lord

@joel__lord

How is a Drivers License like a JSON Web Token?

@joel__lord

Header

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOmZhbHNlfQ.uI_rNanTsZ_wFa1VnICzq2txKeYPArda5QLdVeQYFGI

Drivers License

New York State

{
  "alg":"HS256",
ย  "typ":"JWT"
}

@joel__lord

Payload

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOmZhbHNlfQ.uI_rNanTsZ_wFa1VnICzq2txKeYPArda5QLdVeQYFGI

Picture

Name

Address

Demographics

Restrictions

{
ย  "sub": "1234567890",
ย  "given_name": "Thor",      
ย  "family_name" : "Odinson",
ย  "admin": true
}

@joel__lord

Signature

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOmZhbHNlfQ.uI_rNanTsZ_wFa1VnICzq2txKeYPArda5QLdVeQYFGI

UV Light

Hologram

HMACSHA256(
  header + "." + payload,
  "lokisucks"
)

@joel__lord

๐Ÿ“

/v1/sos
{ "status": 401 }

@joel__lord

/v1/auth
{ 
ย  "status": 200,
  "jwt" :"eyJhbGciOiJIU.." 
}

@joel__lord

/v1/sos

-H "Authorization: Bearer eyJhbGciOiJ..."

{ 
ย  "status": 200,
  "message" : "ok",
ย  "avenger" : "Hulk",
ย  ...
}

@joel__lord

Example (Axios)

axios.post(
  this.apiUrl + '/sos', 
  {
    description: "Help, Thanos!"
  },
  {
    headers: {
      Authorization: "Bearer " + this.jwt
    }
  }
).then(function(data){
  console.log(data); // {message: "ok", avenger: "Hulk"}
})

@joel__lord

api.avengers.com

app.avengers.com

login.avengers.com

@joel__lord

api.avengers.com

app.avengers.com

login.avengers.com

@joel__lord

๐Ÿ”„

api.avengers.com

app.avengers.com

login.avengers.com

@joel__lord

Resources

Overview of JWT Signing Algorithms

http://bit.ly/jwt-alg

JWT Handbook

http://bit.ly/jwt-book

General JWT Resources

jwt.ioย 

@joel__lord

Summary

JSON Web Tokens are excellent for securing SPA applications.

Many excellent JWT Librariesย exist for all languages and frameworks.

Single Page Application security is mainly concerned with authorization.ย 

A security guard couldn't stop Thor, but your server can refuse requests without valid JWT's.

@joel__lord

Thank You

@joel__lord

Copy of A Token Walks Into a SPA (TakeOff Conf 2018)

By Joel Lord

Copy of A Token Walks Into a SPA (TakeOff Conf 2018)

  • 1,268