Security Authentication and Authorization Strategies for Microservice Architecture
This article examines the evolution from monolithic to microservice architectures and presents various authentication and authorization solutions—including SSO, distributed sessions, client tokens, JWT, and OAuth 2.0—highlighting their principles, advantages, and practical considerations for securing inter‑service and external access.
From monolithic to distributed and microservice architectures, application security access faces continuous challenges. To adapt to architectural and requirement changes, authentication and authorization schemes evolve. When dozens or hundreds of microservices interact, efficient and secure identity verification and fine‑grained access control become essential.
1. Monolithic Application vs. Microservices
In traditional monolithic systems, a single application handles all requests, typically performing permission checks via a global interceptor and storing user information in a session after login. Subsequent accesses retrieve user data from this session.
In microservice architectures, an application is split into many small services, each requiring its own authentication and authorization. Access may originate not only from browsers but also from other services, making monolithic‑style permission checks unsuitable. Scenarios include user‑to‑service, service‑to‑service, and external service integration.
1. Single Sign‑On (SSO)
Every user‑facing service must interact with an authentication service, generating substantial network traffic and redundant work, especially when dozens of microservices are involved.
2. Distributed Session Solution
This approach stores authentication information in shared storage, using the user session as a key for a simple distributed hash map. While it can provide high availability and scalability, the shared storage must be protected, often requiring secure links and adding complexity.
3. Client Token Solution
Tokens are generated on the client side, signed by an authentication service, and contain sufficient information to establish user identity across all microservices. Tokens are attached to each request, offering better security. JSON Web Tokens (JWT) are commonly used due to simplicity and library support.
4. Client Token + API Gateway
All requests pass through a gateway that hides microservices. The gateway converts the original user token into an internal session‑ID token, simplifying logout handling because the gateway can revoke tokens.
2. Common Security Authentication Schemes in Microservices
HTTP Basic Authentication
Basic authentication follows a simple challenge‑response flow: the client sends a request, the server responds with 401 and a WWW‑Authenticate header, the client resends credentials encoded in Base64, and the server validates them.
Session‑Based Authentication
After successful login, user data is stored in a session. In monolithic setups, the session resides on the application server and the session ID is stored in a browser cookie.
In distributed environments, session replication or sticky sessions are used, but both have drawbacks such as network overhead or reliance on load balancers.
For microservices, sessions must be externalized (e.g., database, Redis) to be shared across services, aligning with the distributed session approach.
Token‑Based Authentication
Tokens differ from session IDs by containing user information, enabling stateless verification. Typical flow:
1. User submits login credentials (or calls a token endpoint).
2. Authentication service validates credentials and returns a token.
3. Client stores the token (e.g., in cache, database, or cookie).
4. Client includes the token in HTTP request headers for API calls.
5. Receiving microservice validates the token.
6. Service returns the requested resource.Server‑side statelessness: the token carries all necessary user data.
Improved performance: no database lookups for each request.
Supports cross‑program calls where cookies are limited.
3. JWT Overview
Introduction
JSON Web Token (JWT) is an open standard (RFC 7519) for securely transmitting claims between parties. It is compact, URL‑safe, and can be signed or encrypted.
JWT Authentication Flow
Client calls a login or token endpoint with credentials.
Server verifies credentials with an identity provider.
Server creates a JWT and returns it to the client.
Client stores the JWT (e.g., in a cookie or cache) and includes it in the Authorization header of subsequent requests.
Server validates the JWT and, if successful, returns the requested resource.
JWT Structure
A JWT consists of three Base64‑url‑encoded parts concatenated with dots:
header.payload.signature1. Header
Describes the token type and signing algorithm, e.g.:
{
"type": "JWT",
"ALG": "HS256"
}2. Payload
Contains claims, which can be registered (iss, sub, aud, exp, nbf, iat, jti), public, or private.
3. Signature
Created by applying the algorithm specified in the header to the Base64‑encoded header and payload, using a secret key:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)Advantages of JWT
Cross‑language support due to JSON format.
Stateless token‑based authentication.
Small size, easy to transmit.
Token Revocation
Since tokens are stored client‑side, revocation can be handled by clearing cookies, storing revoked tokens in a distributed cache, or using short‑lived tokens.
4. OAuth 2.0 Overview
OAuth 2.0 is an open protocol for secure API authorization, suitable for desktop, web, and mobile applications.
Simple to understand and use.
Secure, as it does not expose user credentials.
Open, allowing any provider to implement it.
OAuth 2.0 defines four roles: client, resource owner, resource server, and authorization server.
Authorization Grant Types
1. Authorization Code
Most secure flow: client redirects user to the authorization server, receives an authorization code, then exchanges it for an access token on the server side.
2. Implicit
Token is returned directly in the redirect URI fragment, suitable for browser‑based clients.
3. Resource Owner Password Credentials
User provides username and password to the client, which forwards them to the authorization server to obtain a token. Used only when the client is highly trusted.
4. Client Credentials
Client authenticates itself (not a user) to obtain an access token, typically for service‑to‑service communication.
5. Reflections and Summary
Combining OAuth and JWT is often recommended: OAuth handles third‑party access and external permission management, while JWT provides lightweight, stateless authentication between microservices.
Choosing the right scheme depends on specific requirements; distributed sessions can also satisfy many scenarios.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Architecture Digest
Focusing on Java backend development, covering application architecture from top-tier internet companies (high availability, high performance, high stability), big data, machine learning, Java architecture, and other popular fields.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
