Middleware

AuthenticationMiddleware forms the heart of the authentication plugin. It intercepts each request to your application and attempts to authenticate a user with one of the authenticators. Each authenticator is tried in order until a user is authenticated or no user could be found. The authentication, identity and authenticationResult attributes are set on the request containing the identity if one was found and the authentication result object which can contain additional errors provided by the authenticators.

At the end of each request the identity is persisted into each stateful authenticator, like the Session authenticator.

Configuration

All configuration for the middleware is done on the AuthenticationService. On the service you can use the following configuration options:

  • identityClass - The class name of identity or a callable identity builder.
  • identityAttribute - The request attribute used to store the identity. Default to identity.
  • unauthenticatedRedirect - The URL to redirect unauthenticated errors to.
  • queryParam - Set to a string to have unauthenticated redirects contain a redirect query string parameter with the previously blocked URL.

Configuring Multiple Authentication Setups

If your application requires different authentication setups for different parts of the application for example the API and Web UI. You can do so by using conditional logic in your applications getAuthenticationService() hook method. By inspecting the request object you can configure authentication appropriately:

public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface
{
    $path = $request->getPath();

    $service = new AuthenticationService();
    if (strpos($path, '/api') === 0) {
        // Accept API tokens only
        $service->loadAuthenticator('Authentication.Token');
        $service->loadIdentifier('Authentication.Token');

        return $service;
    }

    // Web authentication
    // Support sessions and form login.
    $service->loadAuthenticator('Authentication.Session');
    $service->loadAuthenticator('Authentication.Form');

    $service->loadIdentifier('Authentication.Password');

    return $service;
}

While the above example uses a path prefix, you could apply similar logic to the subdomain, domain, or any other header or attribute present in the request.