Implementing Authentication and Authorization

1. Implementing JWT Authentication

PartDetail
Header{"alg":"RS256","typ":"JWT","kid":"k1"}
Payloadiss, sub, aud, exp, iat, jti, custom claims
SignatureRS256/ES256 (asymmetric, recommended)
ValidationVerify sig (JWKS), exp, aud, iss
PitfallDon't use HS256 with shared secrets across services

2. Using OAuth 2.0 Flows

FlowUse Case
Authorization Code + PKCESPAs, mobile, web apps (default)
Client CredentialsService-to-service
Device AuthorizationTVs, CLIs
Refresh TokenLong-lived sessions
Implicit DEPRECATEDReplaced by Auth Code + PKCE
Password Grant DEPRECATEDDiscouraged in OAuth 2.1

3. Implementing API Key Authentication

AspectDetail
TransmissionX-API-Key header (not query string)
StorageHashed (bcrypt/argon2) in DB
ScopePer-key permissions, rate limits
RotationAllow N active keys; expire on schedule
Use caseServer-to-server, partner APIs

4. Using mTLS Authentication

AspectDetail
IdentityClient cert SAN/CN; SPIFFE in mesh
CAInternal PKI (cert-manager + Vault)
RotationShort-lived (24h) auto-rotated
UseService-to-service in zero-trust networks

5. Implementing Token Refresh

AspectDetail
Access token TTL5–15 min
Refresh token TTLHours–days; rotated on use
Refresh rotationIssue new RT each use; detect reuse → revoke chain
Storage (browser)HttpOnly Secure cookie

6. Managing Token Expiration

ClaimDetail
expHard expiration; mandatory
nbfNot-before
iatIssued at
Clock skewAllow ±60s tolerance
Sliding sessionRefresh extends validity

7. Implementing Role-Based Access Control

ConceptDetail
RoleBundle of permissions
AssignmentUser ↔ role(s) ↔ permission(s)
Where checkedGateway, service, method
LimitationCoarse-grained; role explosion

8. Implementing Attribute-Based Access Control

ElementDetail
AttributesSubject, action, resource, environment
PolicyLogical rules over attributes
EngineOPA / Rego, Cedar, Casbin
ProsFine-grained; data-driven

Example: Rego policy

package authz
default allow = false
allow {
  input.method == "GET"
  input.path  == ["orders", id]
  input.user.id == data.orders[id].customer_id
}

9. Using Claims-Based Authorization

ClaimUse
scopeOAuth permission set
rolesRBAC roles list
tenantMulti-tenant isolation
permissionsFine-grained list
CustomAvoid PII in JWT (visible to client)

10. Implementing Service-to-Service Auth

MechanismDetail
mTLS (SPIFFE)Network identity
OAuth client credentialsJWT per service
Token exchange (RFC 8693)Propagate user identity downstream
HMAC signed requestsLightweight (e.g. webhooks)

11. Handling Token Revocation

ApproachDetail
Short-lived tokensSelf-expire quickly (5–15 min)
Revocation listJTI blacklist in Redis
Refresh token revocationRevoke chain on suspicious activity
Introspection (RFC 7662)Active/inactive check at AS

12. Implementing Single Sign-On

ProtocolUse
OIDCModern SSO over OAuth 2.0
SAML 2.0Enterprise SSO
CASOlder, university-style
IdPKeycloak, Auth0, Okta, Entra ID, Cognito