I am trying to fetch the user details of a logged in user :
I am passing the access token collected from :
https://localhost:1099/auth/realms/myrealm/protocol/openid-connect/token
while calling this endpoint :
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.representations.AccessToken;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Collections;
import java.util.Map;
@RestController
public class userDetails {
@GetMapping(value = "/myresources", produces = MediaType.APPLICATION_JSON_VALUE)
public String handleUserInfoRequest(HttpServletRequest request) {
System.out.println("Using HttpServletRequest to inspect authentication...");
// Get the HttpSession from the request
HttpSession session = request.getSession();
// Get the Keycloak security context from the session attribute
KeycloakSecurityContext securityContext = (KeycloakSecurityContext) session.getAttribute(KeycloakSecurityContext.class.getName());
if (securityContext != null) {
AccessToken token = securityContext.getToken();
// Extract details from the token
String userId = token.getId();
String userName = token.getPreferredUsername();
// Print security context details
String securityContextDetails = "User ID: " + userId + "\n" +
"Username: " + userName;
System.out.println("Security Context Details:\n" + securityContextDetails);
// Return a response
return securityContextDetails;
} else {
return "No Keycloak Security Context found";
}
}
}
I have also tried to get the security context from httpServletRequest for secured users using this instead of the session as done above :
// Get the Keycloak security context from the request attribute
KeycloakSecurityContext securityContext = (KeycloakSecurityContext) request.getAttribute(KeycloakSecurityContext.class.getName());
However, I am getting "No Keycloak Security Context found" or security context is null, principal is null. How can I get the user details i.e. "preferrred_username" from the access token. Iam not using spring security and I am using embedded springboot keycloak version 21.0.0 . Thanks in advance for all the inputs.