Skip to content

Commit cbe055e

Browse files
erhanvarlikErhan Varlik
andauthored
[keycloak-spi] add refresh token endpoint (#66)
Co-authored-by: Erhan Varlik <erhan.varlik@tum.de>
1 parent 5586bdc commit cbe055e

5 files changed

Lines changed: 33 additions & 21 deletions

File tree

server/keycloak/src/main/java/com/recipefy/keycloak/controller/AuthController.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class AuthController {
1919
private final KeycloakService keycloakService;
2020

2121
@PostMapping("/login")
22-
public Mono<LoginResponse> login(@Valid @RequestBody LoginRequest request) {
22+
public Mono<TokenResponse> login(@Valid @RequestBody LoginRequest request) {
2323
return keycloakService.login(request);
2424
}
2525

@@ -36,4 +36,9 @@ public Mono<UserInfoResponse> userInfo(@RequestHeader(HttpHeaders.AUTHORIZATION)
3636
String token = authorization.substring(7);
3737
return keycloakService.userInfo(token);
3838
}
39+
40+
@PostMapping("/refresh")
41+
public Mono<TokenResponse> refreshToken(@Valid @RequestBody RefreshTokenRequest request) {
42+
return keycloakService.refreshToken(request);
43+
}
3944
}

server/keycloak/src/main/java/com/recipefy/keycloak/model/LoginResponse.java

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.recipefy.keycloak.model;
2+
3+
import jakarta.validation.constraints.Email;
4+
import jakarta.validation.constraints.NotBlank;
5+
import lombok.Data;
6+
7+
@Data
8+
public class RefreshTokenRequest {
9+
@NotBlank
10+
private String token;
11+
}

server/keycloak/src/main/java/com/recipefy/keycloak/model/TokenResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class TokenResponse {
1010
private String accessToken;
1111
private String refreshToken;
1212
private long expiresIn;
13-
private Long refreshExpiresIn;
13+
private long refreshExpiresIn;
1414
private String tokenType;
1515
private String scope;
1616
}

server/keycloak/src/main/java/com/recipefy/keycloak/service/KeycloakService.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class KeycloakService {
2121
private final WebClient keycloakClient;
2222
private final WebClient keycloakAdminClient;
2323

24-
public Mono<LoginResponse> login(LoginRequest request) {
24+
public Mono<TokenResponse> login(LoginRequest request) {
2525
MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
2626
body.add("grant_type", "password");
2727
body.add("client_id", properties.getCredentials().getRecipefy().getClientId());
@@ -34,7 +34,7 @@ public Mono<LoginResponse> login(LoginRequest request) {
3434
.uri(properties.getKeycloakUri() + "/token")
3535
.bodyValue(body)
3636
.retrieve()
37-
.bodyToMono(LoginResponse.class);
37+
.bodyToMono(TokenResponse.class);
3838
}
3939

4040
public Mono<ResponseEntity<Void>> register(RegisterRequest request) {
@@ -66,6 +66,19 @@ public Mono<UserInfoResponse> userInfo(String token) {
6666
.headers(header-> header.setBearerAuth(token))
6767
.retrieve()
6868
.bodyToMono(UserInfoResponse.class);
69+
}
70+
71+
public Mono<TokenResponse> refreshToken(RefreshTokenRequest request) {
72+
MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
73+
body.add("grant_type", "refresh_token");
74+
body.add("client_id", properties.getCredentials().getRecipefy().getClientId());
75+
body.add("client_secret", properties.getCredentials().getRecipefy().getClientSecret());
76+
body.add("refresh_token", request.getToken());
6977

78+
return keycloakClient.post()
79+
.uri(properties.getKeycloakUri() + "/token")
80+
.bodyValue(body)
81+
.retrieve()
82+
.bodyToMono(TokenResponse.class);
7083
}
7184
}

0 commit comments

Comments
 (0)