</>

Technology

Rest Assured

Difficulty

Intermediate

Interview Question

What is JWT (JSON Web Token) and how do you use it in API testing?

Answer

JWT — JSON Web Token

JWT (JSON Web Token) is a compact, self-contained token used to securely transmit information between parties as a JSON object. It is the most common authentication mechanism for modern REST APIs.

JWT Structure

A JWT has 3 parts separated by dots: header.payload.signature
CODE
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImlhdCI6MTcxODAwMDAwMCwiZXhwIjoxNzE4MDAzNjAwfQ.abc123
        ↑                              ↑                                                    ↑
     Header                         Payload                                            Signature
  (algorithm)           (userId, role, expiry time)                            (verifies authenticity)

Decoded Payload:

JSON
{
  "sub": "user1",
  "role": "admin",
  "iat": 1718000000,
  "exp": 1718003600
}

Step 1: Get JWT Token via Login

Java
public class TokenManager {

    private static String token;

    public static String getToken() {
        if (token == null) {
            token = given()
                        .contentType(ContentType.JSON)
                        .body("{ \"username\": \"admin\", \"password\": \"admin123\" }")
                        .when()
                        .post("https://api.example.com/auth/login")
                        .then()
                        .statusCode(200)
                        .extract()
                        .path("access_token");
        }
        return token;
    }
}

Step 2: Use Token in API Requests

Java
@Test
public void testGetProtectedResource() {

    given()
        .header("Authorization", "Bearer " + TokenManager.getToken())
        .when()
        .get("/api/users/profile")
        .then()
        .statusCode(200)
        .body("role", equalTo("admin"));
}

Step 3: Test Token Expiry

Java
@Test
public void testExpiredTokenReturns401() {

    String expiredToken = "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjEwMDAwMH0.invalid";

    given()
        .header("Authorization", "Bearer " + expiredToken)
        .when()
        .get("/api/users")
        .then()
        .statusCode(401)
        .body("error", equalTo("Token expired"));
}

Step 4: Test Missing Token

Java
@Test
public void testMissingTokenReturns401() {
    given()
        .when()
        .get("/api/users")  // no Authorization header
        .then()
        .statusCode(401);
}

JWT vs Session Tokens

FeatureJWTSession Token
StatelessYesNo (server stores session)
Self-containedYes (has user data)No (just a reference ID)
ExpiryEncoded in tokenManaged server-side
ScalableYesHarder (sticky sessions)
RevocableHard (until expiry)Easy

Follow AutomateQA

Related Topics