Java >> Java tutorial >  >> Tag >> Spring

Sådan godkendes en backend-to-backend med Spring Boot / Keycloak

Det ser ud til, at du mangler en konfiguration til godkendelsesserveren. KeycloakRestTemplate brugt klient-id, klienthemmelighed, brugernavn og adgangskode til at validere mod Keycloak-serveren. Du skal indstille clientid , clientsecret , realm og autentificeringsserver-url for KeycloakClientCredentialsRestTemplate gerne -

@Service
public class MyKeycloakClientCredentialsConfig {

    @Value("${keycloak.realm}")
    private String realm;

    @Value("${keycloak.auth-server-url}")
    private String authServerUrl;

    @Value("${keycloak.resource}")
    private String clientId;

    @Value("${keycloak.credentials.secret}")
    private String clientSecret;

    @Bean
    public KeycloakClientCredentialsRestTemplate createRestTemplate() {
        return new KeycloakClientCredentialsRestTemplate(getClientCredentialsResourceDetails(),
                new DefaultOAuth2ClientContext());
    }

    private ClientCredentialsResourceDetails getClientCredentialsResourceDetails() {
        String accessTokenUri = String.format("%s/realms/%s/protocol/openid-connect/token",
            authServerUrl, realm);
        List<String> scopes = new ArrayList<String>(0); // TODO introduce scopes

        ClientCredentialsResourceDetails clientCredentialsResourceDetails = 
                new ClientCredentialsResourceDetails();

        clientCredentialsResourceDetails.setAccessTokenUri(accessTokenUri);
        clientCredentialsResourceDetails.setAuthenticationScheme(AuthenticationScheme.header);
        clientCredentialsResourceDetails.setClientId(clientId);
        clientCredentialsResourceDetails.setClientSecret(clientSecret);
        clientCredentialsResourceDetails.setScope(scopes);

        return clientCredentialsResourceDetails;
    }

}

Min resttemplate er sådan her-

public class SampleRestTemplate extends OAuth2RestTemplate {

    public KeycloakClientCredentialsRestTemplate(OAuth2ProtectedResourceDetails resource,
            OAuth2ClientContext context) {
        super(resource, context);
    }

}

det fungerer perfekt for mig.


OK, fandt selv løsningen:Jeg var nødt til at sætte kontakten "Servicekonti aktiveret" til ON i klientkonfigurationen for "backend-service2" inde i keycloak.


Java tag