AuthenticationMiddleware
es el corazón del plugin de autenticación.
Intercepta cada solicitud a su aplicación e intenta autenticar a un usuario
con uno de los autenticadores. Cada autenticador se prueba en orden hasta
que se autentica un usuario o no se puede encontrar ningún usuario. Los atributos
de authentication
, identity
y authenticationResult
se establecen en la
solicitud que contiene la identidad si se encontró una y el objeto result de la
autenticación que puede contener errores adicionales proporcionados por los autenticadores.
Al final de cada solicitud, la identity
se conserva en cada autenticador con estado,
como el autenticador Session
.
Toda la configuración del middleware se realiza en el AuthenticationService
.
En este servicio puede utilizar las siguientes opciones de configuración:
identityClass
- El nombre de clase de identidad o un constructor de identidad callable.
identityAttribute
- El atributo de solicitud utilizado para almacenar la identidad.
Por defecto identity
.
unauthenticatedRedirect
- La URL para redirigir los errores no autenticados.
queryParam
- El nombre del parámetro del string de consulta que contiene
la URL previamente bloqueada en caso de redireccionamiento no autenticado, o nulo
para deshabilitar la adición de la URL denegada. Por defecto null
.
Si su aplicación requiere diferentes configuraciones de autenticación para diferentes partes
de la aplicación, por ejemplo, la API y la interfaz de usuario web. Puede hacerlo utilizando
lógica condicional en el método hook getAuthenticationService()
de sus aplicaciones. Al
inspeccionar el objeto request, puede configurar la autenticación de manera adecuada:
public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface
{
$path = $request->getPath();
$service = new AuthenticationService();
if (strpos($path, '/api') === 0) {
// Acepta solo tokens de API
$service->loadAuthenticator('Authentication.Token');
$service->loadIdentifier('Authentication.Token');
return $service;
}
// Autenticación web
// Soporte de sessions y formulario login.
$service->loadAuthenticator('Authentication.Session');
$service->loadAuthenticator('Authentication.Form');
$service->loadIdentifier('Authentication.Password');
return $service;
}
Si bien el ejemplo anterior usa un prefijo de ruta, puede aplicar una lógica similar al subdominio, dominio o cualquier otro encabezado o atributo presente en la solicitud.