I’m having trouble discovering exactly what I need to implement in order to use a custom authentication method with my web application using Spring Security. I have a Grails application with the Spring Security plugin that currently uses the standard user/password authentication with a browser form. This is working correctly.
I need to implement a mechanism alongside of this that implements a type of MAC authentication. If the HTTP request contains several parameters (e.g. a user identifier, timestamp, signature, etc.) I need to take those parameters, perform some hashing and signature/timestamp comparisons, and then authenticate the user.
I’m not 100% sure where to start with this. What Spring Security classes do I need to extend/implement? I have read the Reference Documentation and have an okay understanding of the concepts, but am not really sure if I need a Filter or Provider or Manager, or where/how exactly to create Authentication objects. I’ve messed around trying to extend AbstractProcessingFilter and/or implement AuthenticationProvider, but I just get caught up understanding how I make them all play nicely.
Implement a custom
AuthenticationProviderwhich gets all your authentication information from theAuthentication:getCredentials(),getDetails(), andgetPrincipal().Tie it into your Spring Security authentication mechanism using the following configuration snippet:
This step is optional, if you can find a suitable one from standard implementations. If not, implement a class extending the
Authenticationinterface on which you can put your authentication parameters:Extend a custom
SpringSecurityFilterwhich ties the above two classes together. For example, the Filter might get theAuthenticationManagerand callauthenticate()using your implementation ofAuthenticationas input.You can extend AbstractAuthenticationProcessingFilter as a start.
You can reference UsernamePasswordAuthenticationFilter which extends
AbstractAuthenticationProcessingFilter.UsernamePasswordAuthenticationFilterimplements the standard Username/Password Authentication.Configure your Spring Security to add or replace the standard
AUTHENTICATION_PROCESSING_FILTER. For Spring Security Filter orders, see http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html#filter-stackHere is a configuration snippet for how to replace it with your implementation: