Bird
Raised Fist0
Spring Bootframework~10 mins

Refresh token pattern in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Refresh token pattern
User logs in
Server issues Access Token + Refresh Token
User uses Access Token to access resources
Access Token expires?
NoContinue using Access Token
Yes
User sends Refresh Token to server
Server validates Refresh Token
Refresh Token valid?
NoReject request, ask login
Yes
Server issues new Access Token (and optionally new Refresh Token)
User continues with new Access Token
This flow shows how a user logs in, receives tokens, uses the access token until it expires, then uses the refresh token to get a new access token without logging in again.
Execution Sample
Spring Boot
POST /login -> issue accessToken + refreshToken
GET /resource with accessToken
If accessToken expired:
POST /refresh with refreshToken -> issue new accessToken
This code flow shows login issuing tokens, resource access with access token, and refreshing access token using refresh token.
Execution Table
StepActionToken StateServer ResponseUser Action
1User logs inNo tokensIssues accessToken + refreshTokenStores tokens
2User requests resourceaccessToken validResource dataUses resource
3Access token expiresaccessToken expired401 UnauthorizedSends refreshToken
4Server validates refreshTokenrefreshToken validIssues new accessTokenStores new accessToken
5User requests resource againnew accessToken validResource dataUses resource
6Refresh token invalid or expiredrefreshToken invalid401 UnauthorizedUser must login again
💡 Process stops when refresh token is invalid or user logs out.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5Final
accessTokennullvalidvalidexpirednew validvalidvalid
refreshTokennullvalidvalidvalidvalidvalidvalid or invalid
Key Moments - 3 Insights
Why can't the user keep using the access token after it expires?
Because the access token is no longer valid (see Step 3 in execution_table), the server rejects requests with 401 Unauthorized to protect resources.
What happens if the refresh token is invalid or expired?
The server rejects the refresh request (Step 6), forcing the user to log in again to get new tokens.
Why do we need both access and refresh tokens?
Access tokens are short-lived for security; refresh tokens allow getting new access tokens without logging in again, improving user experience (see flow in concept_flow).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the server response at Step 3 when the access token expires?
AIssues new access token
B401 Unauthorized
CResource data
DRedirect to login page
💡 Hint
Check the 'Server Response' column at Step 3 in execution_table
At which step does the user send the refresh token to the server?
AStep 3
BStep 2
CStep 4
DStep 5
💡 Hint
Look at the 'User Action' column in execution_table for when refreshToken is sent
If the refresh token becomes invalid, what must the user do next?
AContinue using expired access token
BRequest new access token with refresh token
CLog in again to get new tokens
DNothing, tokens auto-renew
💡 Hint
See Step 6 in execution_table and key_moments about invalid refresh token
Concept Snapshot
Refresh Token Pattern in Spring Boot:
- User logs in, server issues access + refresh tokens.
- Access token used for resource access, short-lived.
- When access token expires, user sends refresh token.
- Server validates refresh token, issues new access token.
- If refresh token invalid, user must log in again.
- Improves security and user experience.
Full Transcript
The refresh token pattern helps keep users logged in securely. When a user logs in, the server gives two tokens: an access token and a refresh token. The access token lets the user access resources but expires quickly for safety. When it expires, the user sends the refresh token to get a new access token without logging in again. If the refresh token is invalid or expired, the user must log in again. This flow balances security and convenience by limiting how long access tokens last but allowing easy renewal.

Practice

(1/5)
1.

What is the main purpose of using a refresh token in a Spring Boot authentication system?

easy
A. To encrypt user data in the database
B. To store user passwords securely
C. To log out users automatically after a timeout
D. To allow users to get a new access token without logging in again

Solution

  1. Step 1: Understand the role of refresh tokens

    Refresh tokens are used to get new access tokens without asking the user to log in again.
  2. Step 2: Compare options with this purpose

    Only To allow users to get a new access token without logging in again describes this purpose correctly; others describe unrelated functions.
  3. Final Answer:

    To allow users to get a new access token without logging in again -> Option D
  4. Quick Check:

    Refresh token purpose = renew access token [OK]
Hint: Refresh tokens renew access tokens without re-login [OK]
Common Mistakes:
  • Confusing refresh token with password storage
  • Thinking refresh token logs out users
  • Assuming refresh token encrypts data
2.

Which of the following is the correct way to define a method in a Spring Boot controller to handle refresh token requests?

@PostMapping("/refresh")
public ResponseEntity<TokenResponse> refreshToken(@RequestBody RefreshRequest request) {
    // method body
}
easy
A. @GetMapping("/refresh") public TokenResponse refreshToken(@RequestBody RefreshRequest request)
B. @PostMapping("/refresh") public void refreshToken(String token)
C. @PostMapping("/refresh") public ResponseEntity<TokenResponse> refreshToken(@RequestBody RefreshRequest request)
D. @RequestMapping("/refresh") public String refreshToken()

Solution

  1. Step 1: Check HTTP method and parameters

    The refresh token request should be a POST with a JSON body containing the refresh token.
  2. Step 2: Match method signature

    @PostMapping("/refresh") public ResponseEntity<TokenResponse> refreshToken(@RequestBody RefreshRequest request) correctly uses @PostMapping, returns ResponseEntity<TokenResponse>, and accepts @RequestBody RefreshRequest.
  3. Final Answer:

    @PostMapping("/refresh") public ResponseEntity<TokenResponse> refreshToken(@RequestBody RefreshRequest request) -> Option C
  4. Quick Check:

    Correct POST method and request body = @PostMapping("/refresh") public ResponseEntity<TokenResponse> refreshToken(@RequestBody RefreshRequest request) [OK]
Hint: Refresh token requests use POST with @RequestBody [OK]
Common Mistakes:
  • Using GET instead of POST
  • Missing @RequestBody annotation
  • Wrong return type or parameters
3.

Given the following Spring Boot service method, what will be the output if the refresh token is invalid?

public TokenResponse refreshAccessToken(String refreshToken) {
    if (!tokenRepository.existsByToken(refreshToken)) {
        throw new RuntimeException("Invalid refresh token");
    }
    // generate new access token
    return new TokenResponse("newAccessToken");
}
medium
A. Throws RuntimeException with message "Invalid refresh token"
B. Returns a new TokenResponse with "newAccessToken"
C. Returns null
D. Returns the old refresh token

Solution

  1. Step 1: Analyze the token existence check

    The method checks if the refresh token exists in the repository; if not, it throws an exception.
  2. Step 2: Determine behavior on invalid token

    Since the token is invalid, the method throws RuntimeException with the message "Invalid refresh token".
  3. Final Answer:

    Throws RuntimeException with message "Invalid refresh token" -> Option A
  4. Quick Check:

    Invalid token triggers exception = Throws RuntimeException with message "Invalid refresh token" [OK]
Hint: Invalid refresh token causes exception throw [OK]
Common Mistakes:
  • Assuming method returns null on invalid token
  • Thinking it returns old token instead
  • Ignoring exception throwing
4.

Identify the error in this Spring Boot refresh token controller method:

@PostMapping("/refresh")
public ResponseEntity<TokenResponse> refreshToken(@RequestParam String refreshToken) {
    TokenResponse token = authService.refreshAccessToken(refreshToken);
    return ResponseEntity.ok(token);
}

What is the problem?

medium
A. Using @RequestParam instead of @RequestBody for refresh token
B. Missing @PostMapping annotation
C. Returning ResponseEntity instead of TokenResponse
D. Calling wrong service method

Solution

  1. Step 1: Check parameter annotation

    The refresh token is usually sent in the request body as JSON, not as a query parameter.
  2. Step 2: Identify correct annotation

    The method should use @RequestBody instead of @RequestParam to receive the refresh token properly.
  3. Final Answer:

    Using @RequestParam instead of @RequestBody for refresh token -> Option A
  4. Quick Check:

    Refresh token needs @RequestBody, not @RequestParam [OK]
Hint: Refresh token comes in body, use @RequestBody [OK]
Common Mistakes:
  • Using query parameters for refresh token
  • Confusing ResponseEntity with return type
  • Missing or wrong annotations
5.

You want to implement a refresh token mechanism in Spring Boot that invalidates the old refresh token after use and issues a new one along with the access token. Which approach below correctly achieves this?

hard
A. Check refresh token validity, generate new access token, keep old refresh token unchanged
B. Generate new access token and new refresh token, save new refresh token, delete old refresh token
C. Generate new access token only, do not check refresh token validity
D. Delete refresh token without issuing new tokens

Solution

  1. Step 1: Understand token rotation

    To improve security, the old refresh token should be invalidated and replaced with a new one after use.
  2. Step 2: Identify correct token handling

    Generate new access token and new refresh token, save new refresh token, delete old refresh token correctly generates new access and refresh tokens, saves the new refresh token, and deletes the old one.
  3. Final Answer:

    Generate new access token and new refresh token, save new refresh token, delete old refresh token -> Option B
  4. Quick Check:

    Refresh token rotation = Generate new access token and new refresh token, save new refresh token, delete old refresh token [OK]
Hint: Rotate refresh tokens: new token saved, old token deleted [OK]
Common Mistakes:
  • Not invalidating old refresh token
  • Skipping refresh token validity check
  • Deleting tokens without issuing new ones