JWT replaces the cookie and makes APIs / Web stateless
JWT Token can easily be decoded
JWT has No true logout
Always use: Authorization: Bearer <TOKEN>
Bearer authentication scheme prevents CSRF attacks
sample JWT token includes the following elements.
Header : Algorithm and token type
{
“alg”: “HS256”,
“typ”: “JWT”
}
Payload : data
{
“sub”: “1234567890”,
“name”: “John Doe”,
“admin”: true
}
Verify signature:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
Final output:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Using JWT.IO we can easily decode, verify and generate JWT tokens.
OAuth 2.0:
Authorization Framework:
Support APIs, Web, etc.
OAuth 2.0 Key Components
- Authorization Server (Token Factory, e.g. GitHub)
- Resource Server (API / Microservice, e.g. GitHub API)
- Client (UI / Mobile / API / Microservice e.g. Login with GitHub )
- User (Resource Owner)
- User Agent (Device/Browser)
OAuth 2.0 Grant Types
- Authorization Code
- Used for User Authorization by Web / Mobile
- (e.g. Login with Github UI button -> GitHub for Authorization -> Token to access GitHub APIs on behalf of the user)
- Requires Web/Mobile client to register with GitHub and have a client-secret to make token validation, refresh calls
- The browser only sees a temp code. The client takes the temp code along with client-secret to get access-token
- The client should register the Authorization Server have the client-id/client-secret with it
- Client Credentials
- Machine-Machine communication
- (Go to GitHub and generate Client ID/Client Secret to access GitHub APIs)
PKCE for single page Apps
https://www.oauth.com/oauth2-servers/single-page-apps/
https://www.oauth.com/
SAML
Single Sign-on Across Sites
2008 had only SAML & Login Forms / cookies
** No way to support Mobile Apps Login
** No way to support Delegated Authorization
OpenID Connect is for Authentication
OAuth 2.0 is for Authorization
What does OpenID Connect add?
- ID Token
- UserInfo endpoint for getting more user info
- A standard set of scopes
- Standardized implementation
When to Use OpenID Connect?
- Form login
- Single sign-on across sites
- Mobile App login
- Delegated authorization (OAuth 2.0)
When using OpenID Connect
Login with Google will go with an extra scope: openid
and will return with extra /userinfo endpoint and openid token for requesting more user profile info
Comments