org.springframework.security.openid
Class OpenIDAuthenticationFilter

java.lang.Object
  extended by org.springframework.web.filter.GenericFilterBean
      extended by org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
          extended by org.springframework.security.openid.OpenIDAuthenticationFilter
All Implemented Interfaces:
javax.servlet.Filter, BeanNameAware, DisposableBean, InitializingBean, ApplicationEventPublisherAware, MessageSourceAware, ServletContextAware

public class OpenIDAuthenticationFilter
extends AbstractAuthenticationProcessingFilter

Filter which processes OpenID authentication requests.

The OpenID authentication involves two stages.

Submission of OpenID identity

The user's OpenID identity is submitted via a login form, just as it would be for a normal form login. At this stage the filter will extract the identity from the submitted request (by default, the parameter is called openid_identifier, as recommended by the OpenID 2.0 Specification). It then passes the identity to the configured OpenIDConsumer, which returns the URL to which the request should be redirected for authentication. A "return_to" URL is also supplied, which matches the URL processed by this filter, to allow the filter to handle the request once the user has been successfully authenticated. The OpenID server will then authenticate the user and redirect back to the application.

Processing the Redirect from the OpenID Server

Once the user has been authenticated externally, the redirected request will be passed to the OpenIDConsumer again for validation. The returned OpenIDAuthentication will be passed to the AuthenticationManager where it should (normally) be processed by an OpenIDAuthenticationProvider in order to load the authorities for the user.

Since:
2.0
See Also:
OpenIDAuthenticationProvider

Field Summary
static String DEFAULT_CLAIMED_IDENTITY_FIELD
           
 
Fields inherited from class org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
authenticationDetailsSource, eventPublisher, messages, SPRING_SECURITY_LAST_EXCEPTION_KEY
 
Fields inherited from class org.springframework.web.filter.GenericFilterBean
logger
 
Constructor Summary
OpenIDAuthenticationFilter()
           
 
Method Summary
 void afterPropertiesSet()
           
 Authentication attemptAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
          Authentication has two phases.
protected  String buildReturnToUrl(javax.servlet.http.HttpServletRequest request)
          Builds the return_to URL that will be sent to the OpenID service provider.
protected  String lookupRealm(String returnToUrl)
           
protected  String obtainUsername(javax.servlet.http.HttpServletRequest req)
          Reads the claimedIdentityFieldName from the submitted request.
 void setClaimedIdentityFieldName(String claimedIdentityFieldName)
          The name of the request parameter containing the OpenID identity, as submitted from the initial login form.
 void setConsumer(OpenIDConsumer consumer)
           
 void setRealmMapping(Map<String,String> realmMapping)
          Maps the return_to url to a realm, for example:
 void setReturnToUrlParameters(Set<String> returnToUrlParameters)
          Specifies any extra parameters submitted along with the identity field which should be appended to the return_to URL which is assembled by buildReturnToUrl(javax.servlet.http.HttpServletRequest).
 
Methods inherited from class org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
doFilter, getAllowSessionCreation, getAuthenticationDetailsSource, getAuthenticationManager, getFilterProcessesUrl, getRememberMeServices, requiresAuthentication, setAllowSessionCreation, setApplicationEventPublisher, setAuthenticationDetailsSource, setAuthenticationFailureHandler, setAuthenticationManager, setAuthenticationSuccessHandler, setContinueChainBeforeSuccessfulAuthentication, setFilterProcessesUrl, setMessageSource, setRememberMeServices, setSessionAuthenticationStrategy, successfulAuthentication, unsuccessfulAuthentication
 
Methods inherited from class org.springframework.web.filter.GenericFilterBean
addRequiredProperty, destroy, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setServletContext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_CLAIMED_IDENTITY_FIELD

public static final String DEFAULT_CLAIMED_IDENTITY_FIELD
See Also:
Constant Field Values
Constructor Detail

OpenIDAuthenticationFilter

public OpenIDAuthenticationFilter()
Method Detail

afterPropertiesSet

public void afterPropertiesSet()
Specified by:
afterPropertiesSet in interface InitializingBean
Overrides:
afterPropertiesSet in class AbstractAuthenticationProcessingFilter

attemptAuthentication

public Authentication attemptAuthentication(javax.servlet.http.HttpServletRequest request,
                                            javax.servlet.http.HttpServletResponse response)
                                     throws AuthenticationException,
                                            IOException
Authentication has two phases.
  1. The initial submission of the claimed OpenID. A redirect to the URL returned from the consumer will be performed and null will be returned.
  2. The redirection from the OpenID server to the return_to URL, once it has authenticated the user

Specified by:
attemptAuthentication in class AbstractAuthenticationProcessingFilter
Parameters:
request - from which to extract parameters and perform the authentication
response - the response, which may be needed if the implementation has to do a redirect as part of a multi-stage authentication process (such as OpenID).
Returns:
the authenticated user token, or null if authentication is incomplete.
Throws:
AuthenticationException - if authentication fails.
IOException

lookupRealm

protected String lookupRealm(String returnToUrl)

buildReturnToUrl

protected String buildReturnToUrl(javax.servlet.http.HttpServletRequest request)
Builds the return_to URL that will be sent to the OpenID service provider. By default returns the URL of the current request.

Parameters:
request - the current request which is being processed by this filter
Returns:
The return_to URL.

obtainUsername

protected String obtainUsername(javax.servlet.http.HttpServletRequest req)
Reads the claimedIdentityFieldName from the submitted request.


setRealmMapping

public void setRealmMapping(Map<String,String> realmMapping)
Maps the return_to url to a realm, for example:
 http://www.example.com/j_spring_openid_security_check -> http://www.example.com/realm
 
If no mapping is provided then the returnToUrl will be parsed to extract the protocol, hostname and port followed by a trailing slash. This means that http://www.example.com/j_spring_openid_security_check will automatically become http://www.example.com:80/

Parameters:
realmMapping - containing returnToUrl -> realm mappings

setClaimedIdentityFieldName

public void setClaimedIdentityFieldName(String claimedIdentityFieldName)
The name of the request parameter containing the OpenID identity, as submitted from the initial login form.

Parameters:
claimedIdentityFieldName - defaults to "openid_identifier"

setConsumer

public void setConsumer(OpenIDConsumer consumer)

setReturnToUrlParameters

public void setReturnToUrlParameters(Set<String> returnToUrlParameters)
Specifies any extra parameters submitted along with the identity field which should be appended to the return_to URL which is assembled by buildReturnToUrl(javax.servlet.http.HttpServletRequest).

Parameters:
returnToUrlParameters - the set of parameter names. If not set, it will default to the parameter name used by the RememberMeServices obtained from the parent class (if one is set).