/
OAuth2 med Quarkus

OAuth2 med Quarkus

För att använda OAuth2 med Quarkus (≥ 2.x), via ramverkets egna modul, lägg till quarkus-oidc-client-filter i projektet:

... <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-oidc-client-filter</artifactId> </dependency> ...

Skapa en klient - något i stil med:

package my.package; import java.util.Set; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.GET; import javax.ws.rs.Path; import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @Path("/v2") @RegisterProvider(CountriesOAuth2Filter.class) @RegisterRestClient(configKey = "WEATHER-CLIENT") @ApplicationScoped public interface CountriesService { @GET @Path("/name/{name}") Set<Country> getByName(@PathParam String name); }

Om configKey utelämnas för @RegisterRestClient-annoteringen kommer klientens fulla klassnamn (my.package.CountriesService) att användas, både i OAuth2-filterklassen som pekas ut med @RegisterProvider-annoteringen och som visas nedan och i application.properties.

package my.package; import javax.annotation.Priority; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.ws.rs.Priorities; import javax.ws.rs.client.ClientRequestContext; import javax.ws.rs.client.ClientRequestFilter; import javax.ws.rs.core.HttpHeaders; import io.quarkus.oidc.client.NamedOidcClient; import io.quarkus.oidc.client.Tokens; @RequestScoped @Priority(Priorities.AUTHENTICATION) public class CountriesOAuth2Filter implements ClientRequestFilter { @Inject @NamedOidcClient("WEATHER-CLIENT") Tokens tokens; @Override public void filter(final ClientRequestContext requestContext) { requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, "Bearer " + tokens.getAccessToken()); } }

Lägg till motsvarande konfiguration i application.properties:

Viktigt är att separera quarkus.oidc-client.<CLIENT>.auth-server-url och quarkus.oidc-client.<CLIENT>.token-path - den förstnämnda pekar ut URL:en till servern och den sistnämnda pekar ut path:en.

Utöver det - lägg till följande i application.properties:

 

Related pages