Create a Custom Authenticator

Version 4.1 by gcoquard on 2021/04/21

It is possible to plug to any existing authentication mechanism such as SiteMinder, etc.

To configure a custom authentication do the following:

  • Edit the WEB-INF/xwiki.cfg file and add a xwiki.authentication.authclass property pointing to your class. For example:
xwiki.authentication.authclass = com.acme.MyCustomAuthenticationService

Here is an example code for a custom authenticator designed as a component:

import ...;
 
import org.xwiki.observation.ObservationManager;
import org.xwiki.security.authentication.UserAuthenticatedEvent;
import org.xwiki.user.UserReference;

@Component
public class CustomAuthenticator {

   // Inject ObservationManager component
   @Inject
   private ObservationManager observationManager;

   ...

   public void processLogin(...)
   {
       // You authenticate a user somehow

       // You have to retrieve its UserReference
       // You should be able to use a UserReferenceResolver if needed
       UserReference userReference = ...;

       // Then, trigger a UserAuthenticatedEvent by passing previously retrived user reference to UserAuthenticatedEvent constructor
       this.observationManager.notify(new UserAuthenticatedEvent(userReference), null);
   }

}

You can find various authenticators examples in sandbox or extensions.

Here's a tutorial on implementing a custom authentication class for authenticating against Oracle's SSO.

Get Connected