- Purpose: The Status List Server is a service that provides Status List Tokens to Relying Parties for verifying the status of Referenced Tokens (e.g., OAuth 2.0 tokens). It enables efficient and scalable token status management.
- Key Features:
- Serve Status List Tokens in JWT or CWT format.
- Support for high-frequency status updates.
- Scalable and secure architecture.
- Audience: This guide is intended for developers integrating with the Status List Server, including Relying Parties and Token Issuers.
High-Level Diagram:
- Components:
- Token Issuer: Issues Referenced Tokens with a
statusclaim pointing to the Status List Server. - Status List Server: Hosts and serves Status List Tokens containing token statuses.
- Relying Party: Requests and uses Status List Tokens to verify the status of Referenced Tokens.
- Token Issuer: Issues Referenced Tokens with a
-
Token Issuance:
- The Token Issuer creates a Referenced Token with a
statusclaim containing:status_list.url: The URL of the Status List Server.status_list.index: The index of the token's status in the Status List Token.
- The Referenced Token is sent to the client.
- The Token Issuer creates a Referenced Token with a
-
Status List Token Retrieval:
- The Relying Party extracts the
statusclaim from the Referenced Token. - It sends an HTTP GET request to the
status_list.urlwith an optionalAcceptheader (application/statuslist+jwtorapplication/statuslist+cwt). - The Status List Server responds with the gzip compressed Status List Token in the requested format.
- The Relying Party extracts the
-
Token Status Verification:
- The Relying Party decompresses and decodes the Status List Token (JWT or CWT).
- It uses the
status_list.indexto locate the token's status in the Status List Token. - The status is used to determine if the Referenced Token is valid, revoked, or expired.
-
Referenced Token:
{ "iss": "https://issuer.example.com", "sub": "user123", "status": { "status_list": { "url": "https://statuslist.example.com/statuslists/1", "index": 42 } } } -
Status List Token (JWT Example):
{ "iss": "https://issuer.example.com", "sub": "https://statuslist.example.com/statuslists/1", "status_list": { "bits": 1, "lst": "eyJhbGciOiJFUzI1NiIsImtpZCI6IjEyIiwidHlwIjoic3RhdHVzbGlzdCtqd3QifQ..." }, "exp": 2291720170, "ttl": 43200 } -
Status List Token (CWT Example):
d2845820a2012610781a6170706c69636174696f6e2f7374617475736c6973742b63 7774a1044231325850a502782168747470733a2f2f6578616d706c652e636f6d2f73 74617475736c697374732f31061a648c5bea041a8898dfea19fffe19a8c019fffda2 646269747301636c73744a78dadbb918000217015d5840251d844ecc6541b8b2fd24 e681836c1a072cad61716fb174d57b162b4b392c1ea08b875a493ca8d1cf4328eee1 b14f33aa899e532844778ba2fff80b5c1e56e5
This section provides an overview of the technology stack and design principles used to build the Status List Server.
The Status List Server is built using modern, performant, and scalable technologies. Below is the tech stack used:
- Axum: web application framework that focuses on ergonomics and modularity
- Serde: A powerful serialization framework for Rust, used to serialize and deserialize JSON data (e.g., Status List Tokens, credentials).
- jsonwebtoken: Used for encoding and decoding Status List Tokens in JWT (JSON Web Token) format.
- coset: Used for encoding and decoding Status List Tokens in CWT (CBOR Web Token) format.
- Database: to map and store statuslist to id and credentials.
The data flow in the Status List Server is as follows:
-
Token Issuer:
- Issues a Referenced Token with a
statusclaim containing the Status List URL and index. - signs and update status list token to corresponding jwt or cwt before sending to status list server
- Sends a request to update the token status when necessary.
- Issues a Referenced Token with a
-
Relying Party:
- Receives the Referenced Token and extracts the
statusclaim. - Requests the Status List Token from the Status List Server.
- Validates the status list.
- Decodes the Status List Token and verifies the token's status.
- Receives the Referenced Token and extracts the
-
Status List Server:
- Receives requests from Token Issuers and Relying Parties.
- Updates token statuses in the Status List.
- Serves Status List Tokens to Relying Parties.
- HTTPS: All communication with the Status List Server must use HTTPS to ensure data integrity and confidentiality.
- Token Signing: Status List Tokens must be signed (e.g., using JWT or CWT) to prevent tampering.
- CORS: The Status List Server should support Cross-Origin Resource Sharing (CORS) for browser-based clients.
- Rate Limiting: Implement rate limiting to prevent abuse of the Status List Server.
- Step 1: Configure the Token Issuer to include the
statusclaim in Referenced Tokens. - Step 2: Implement the Relying Party to:
- Extract the
statusclaim from the Referenced Token. - Request the Status List Token from the Status List Server.
- Decode and verify the Status List Token.
- Use the
indexto check the token's status.
- Extract the
- Step 3: Test the integration using sample Referenced Tokens and Status List Tokens.
- Common Issues:
- Invalid
status_list.urlin the Referenced Token. - Incorrect
Acceptheader in the request. - Expired or invalid Status List Token.
- Invalid
- Debugging Tips:
- Check HTTP response codes and headers.
- Validate the structure of the Referenced Token and Status List Token.
