/
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
: