Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.keycloak.jaxrs;
  
  
 import java.net.URI;
 import java.util.Map;

Helper code to obtain oauth access tokens via browser redirects

Author(s):
Bill Burke
Version:
$Revision: 1 $
 
 public class JaxrsOAuthClient extends AbstractOAuthClient {
     protected static final Logger logger = Logger.getLogger(JaxrsOAuthClient.class);
     protected Client client;

    
closes client
 
     public void stop() {
         if ( != null.close();
     }
     public Client getClient() {
         return ;
     }
 
     public void setClient(Client client) {
         this. = client;
     }
 
     public String resolveBearerToken(String redirectUriString code) {
         redirectUri = stripOauthParametersFromRedirect(redirectUri);
         Form codeForm = new Form()
                 .param(."authorization_code")
                 .param(.code)
                 .param(.)
                 .param(.redirectUri);
         for (Map.Entry<StringStringentry : .entrySet()) {
             codeForm.param(entry.getKey(), entry.getValue());
         }
         Response res = .target().request().post(Entity.form(codeForm));
         try {
             if (res.getStatus() == 400) {
                 throw new BadRequestException();
             } else if (res.getStatus() != 200) {
                 throw new InternalServerErrorException(new Exception("Unknown error when getting acess token"));
             }
             AccessTokenResponse tokenResponse = res.readEntity(AccessTokenResponse.class);
             return tokenResponse.getToken();
         } finally {
             res.close();
         }
     }
     public Response redirect(UriInfo uriInfoString redirectUri) {
         String state = getStateCode();
 
         UriBuilder uriBuilder = UriBuilder.fromUri()
                 .queryParam(.)
                 .queryParam(.redirectUri)
                 .queryParam(.state);
         if ( != null) {
             uriBuilder.queryParam(.);
         }
 
         URI url = uriBuilder.build();
 
         NewCookie cookie = new NewCookie(getStateCookieName(), stategetStateCookiePath(uriInfo), nullnull, -1, true);
         .debug("NewCookie: " + cookie.toString());
         .debug("Oauth Redirect to: " + url);
         return Response.status(302)
                 .location(url)
                 .cookie(cookie).build();
     }
 
     public String getStateCookiePath(UriInfo uriInfo) {
         if ( != nullreturn ;
         return uriInfo.getBaseUri().getRawPath();
     }
 
     public String getBearerToken(UriInfo uriInfoHttpHeaders headersthrows BadRequestExceptionInternalServerErrorException {
         String error = getError(uriInfo);
         if (error != nullthrow new BadRequestException(new Exception("OAuth error: " + error));
         checkStateCookie(uriInfoheaders);
         String code = getAccessCode(uriInfo);
        if (code == nullthrow new BadRequestException(new Exception("code parameter was null"));
        return resolveBearerToken(uriInfo.getRequestUri().toString(), code);
    }
    public String getError(UriInfo uriInfo) {
        return uriInfo.getQueryParameters().getFirst(.);
    }
    public String getAccessCode(UriInfo uriInfo) {
        return uriInfo.getQueryParameters().getFirst(.);
    }
    public void checkStateCookie(UriInfo uriInfoHttpHeaders headers) {
        Cookie stateCookie = headers.getCookies().get();
        if (stateCookie == nullthrow new BadRequestException("state cookie not set");
        String state = uriInfo.getQueryParameters().getFirst(.);
        if (state == nullthrow new BadRequestException("state parameter was null");
        if (!state.equals(stateCookie.getValue())) {
            throw new BadRequestException("state parameter invalid");
        }
    }
New to GrepCode? Check out our FAQ X