KeycloakJwtAuthenticationConverter.java
package com.project.auth.config.auth.security;
import com.project.auth.presentation.auth.current.AuthenticatedUser;
import org.springframework.core.convert.converter.Converter;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.oauth2.jwt.Jwt;
import java.util.Collection;
import java.util.Objects;
public class KeycloakJwtAuthenticationConverter implements Converter<Jwt, AbstractAuthenticationToken> {
private final Converter<Jwt, Collection<GrantedAuthority>> authoritiesConverter;
private final KeycloakAuthenticatedUserFactory authenticatedUserFactory;
public KeycloakJwtAuthenticationConverter(
Converter<Jwt, Collection<GrantedAuthority>> authoritiesConverter,
KeycloakAuthenticatedUserFactory authenticatedUserFactory
) {
this.authoritiesConverter = Objects.requireNonNull(authoritiesConverter, "authoritiesConverter must not be null");
this.authenticatedUserFactory = Objects.requireNonNull(
authenticatedUserFactory,
"authenticatedUserFactory must not be null"
);
}
@Override
public AbstractAuthenticationToken convert(Jwt jwt) {
Collection<GrantedAuthority> authorities = authoritiesConverter.convert(jwt);
AuthenticatedUser principal = authenticatedUserFactory.create(jwt, authorities);
return new KeycloakJwtAuthenticationToken(jwt, authorities, principal, jwt.getSubject());
}
}