Class OAuth2ReqResolver

java.lang.Object
com.alpaca.security.oauth2.OAuth2ReqResolver
All Implemented Interfaces:
org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver

public class OAuth2ReqResolver extends Object implements org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver
Custom OAuth2 authorization request resolver that extends the default Spring Security behavior to support Proof Key for Code Exchange (PKCE) by adding `code_verifier`, `code_challenge`, and `code_challenge_method` parameters into the authorization request.

This resolver wraps the DefaultOAuth2AuthorizationRequestResolver and decorates each generated request with PKCE parameters to enhance security, as recommended by OAuth 2.0 best current practice. The `S256` method is used to generate the code challenge—using SHA-256 hash and Base64URL encoding.

See Also:
  • OAuth2AuthorizationRequestResolver
  • DefaultOAuth2AuthorizationRequestResolver
  • PkceParameterNames
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver
     
    private final org.springframework.security.crypto.keygen.StringKeyGenerator
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    OAuth2ReqResolver(org.springframework.security.oauth2.client.registration.ClientRegistrationRepository repository, String authorizationRequestBaseURI)
    Constructs the resolver using a repository of client registrations and a base URI.
  • Method Summary

    Modifier and Type
    Method
    Description
    private void
    addPKCEParameters(Map<String,Object> attributes, Map<String,Object> additionalParameters)
     
    private static String
     
    private org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest
    customizeAuthorizationRequest(org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest request)
     
    org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest
    resolve(jakarta.servlet.http.HttpServletRequest request)
     
    org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest
    resolve(jakarta.servlet.http.HttpServletRequest request, String clientRegistrationId)
     

    Methods inherited from class java.lang.Object

    clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • defaultResolver

      private final org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver defaultResolver
    • securityKeyGenerator

      private final org.springframework.security.crypto.keygen.StringKeyGenerator securityKeyGenerator
  • Constructor Details

    • OAuth2ReqResolver

      public OAuth2ReqResolver(org.springframework.security.oauth2.client.registration.ClientRegistrationRepository repository, String authorizationRequestBaseURI)
      Constructs the resolver using a repository of client registrations and a base URI.
      Parameters:
      repository - the ClientRegistrationRepository containing client configs
      authorizationRequestBaseURI - the base URI for initiating authorization requests
  • Method Details

    • resolve

      public org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest resolve(jakarta.servlet.http.HttpServletRequest request)
      Specified by:
      resolve in interface org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver
    • resolve

      public org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest resolve(jakarta.servlet.http.HttpServletRequest request, String clientRegistrationId)
      Specified by:
      resolve in interface org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver
    • customizeAuthorizationRequest

      private org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest customizeAuthorizationRequest(org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest request)
    • addPKCEParameters

      private void addPKCEParameters(Map<String,Object> attributes, Map<String,Object> additionalParameters)
    • createHash

      private static String createHash(String value) throws NoSuchAlgorithmException
      Throws:
      NoSuchAlgorithmException