package io.dropwizard.auth.oauth;

import io.dropwizard.auth.AuthFilter;
import io.dropwizard.auth.Authenticator;

import javax.annotation.Nullable;
import javax.annotation.Priority;
import javax.ws.rs.Priorities;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.SecurityContext;
import java.io.IOException;
import java.security.Principal;

@Priority(Priorities.AUTHENTICATION)
public class OAuthCredentialAuthFilter<P extends Principal> extends AuthFilter<String, P> {

    
Query parameter used to pass Bearer token
See Also:
/** * Query parameter used to pass Bearer token * * @see <a href="https://tools.ietf.org/html/rfc6750#section-2.3">The OAuth 2.0 Authorization Framework: Bearer Token Usage</a> */
public static final String OAUTH_ACCESS_TOKEN_PARAM = "access_token"; private OAuthCredentialAuthFilter() { } @Override public void filter(final ContainerRequestContext requestContext) throws IOException { String credentials = getCredentials(requestContext.getHeaders().getFirst(HttpHeaders.AUTHORIZATION)); // If Authorization header is not used, check query parameter where token can be passed as well if (credentials == null) { credentials = requestContext.getUriInfo().getQueryParameters().getFirst(OAUTH_ACCESS_TOKEN_PARAM); } if (!authenticate(requestContext, credentials, SecurityContext.BASIC_AUTH)) { throw new WebApplicationException(unauthorizedHandler.buildResponse(prefix, realm)); } }
Parses a value of the `Authorization` header in the form of `Bearer a892bf3e284da9bb40648ab10`.
Params:
  • header – the value of the `Authorization` header
Returns:a token
/** * Parses a value of the `Authorization` header in the form of `Bearer a892bf3e284da9bb40648ab10`. * * @param header the value of the `Authorization` header * @return a token */
@Nullable private String getCredentials(String header) { if (header == null) { return null; } final int space = header.indexOf(' '); if (space <= 0) { return null; } final String method = header.substring(0, space); if (!prefix.equalsIgnoreCase(method)) { return null; } return header.substring(space + 1); }
Builder for OAuthCredentialAuthFilter.

An Authenticator must be provided during the building process.

Type parameters:
  • <P> – the type of the principal
/** * Builder for {@link OAuthCredentialAuthFilter}. * <p>An {@link Authenticator} must be provided during the building process.</p> * * @param <P> the type of the principal */
public static class Builder<P extends Principal> extends AuthFilterBuilder<String, P, OAuthCredentialAuthFilter<P>> { @Override protected OAuthCredentialAuthFilter<P> newInstance() { return new OAuthCredentialAuthFilter<>(); } } }