Los Identificadores identificarán a un usuario o servicio en función de la información
que fue extraída de la request por los autenticadores. Los Identificadores
pueden tomar opciones en el método loadIdentifier
. Un ejemplo holístico de
el uso del Identificador de Contraseña se ve así:
$service->loadIdentifier('Authentication.Password', [
'fields' => [
'username' => 'email',
'password' => 'passwd',
],
'resolver' => [
'className' => 'Authentication.Orm',
'userModel' => 'Users'
'finder' => 'active'
],
'passwordHasher' => [
'className' => 'Authentication.Fallback',
'hashers' => [
'Authentication.Default',
[
'className' => 'Authentication.Legacy',
'hashType' => 'md5'
],
]
]
]);
El identificador de contraseña compara las credenciales suministradas con una fuente de datos.
Opciones de configuración:
fields: Los campos a buscar. Por defecto son
['username' => 'username', 'password' => 'password']
. Tambien puede
colocar el username
en un array. Por ejemplo usando
['username' => ['username', 'email'], 'password' => 'password']
lo que le permitirá hacer coincidir con la columna username o la columna email.
resolver: El resolver de la identidad. Por defecto es
Authentication.Orm
el cual usa el ORM de CakePHP.
passwordHasher: Hasher del password. Por defecto es
DefaultPasswordHasher::class
.
Comprueba el token suministrado con una fuente de datos.
Opciones de configuración:
tokenField: El campo a verificar en la base de datos. Por defecto
es token
.
dataField: El campo en los datos suministrados del autenticador.
Por defecto es token
.
resolver: El resolver de la identidad. Por defecto es
Authentication.Orm
el cual usa el ORM de CakePHP.
Comprueba el token JWT suministrado con una fuente de datos.
Opciones de configuración:
tokenField: El campo a verificar en la base de datos. Por defecto
es id
.
dataField: La clave del payload para obetener el usuario desde el identificador.
Por defecto es sub
.
resolver: El resolver de la identidad. Por defecto es
Authentication.Orm
el cual usa el ORM de CakePHP.
Compara las credenciales suministradas con un servidor LDAP. Este identificador requiere la extensión PHP LDAP.
Opciones de configuración:
fields: Los campos a utilizar. Por defecto son
['username' => 'username', 'password' => 'password']
.
host: El FQDN de tu servidor LDAP.
port: El puerto de tu servidor LDAP. Por defecto 389
.
bindDN: El Distinguished Name de el usuario a autenticar. Debe ser un callable. Los enlaces anónimos no están soportados.
ldap: El adaptador de la extensión. Por defecto
\Authentication\Identifier\Ldap\ExtensionAdapter
. Puedes suministrar un
object/classname personalizado(a) si este(a) implementa el
AdapterInterface
.
options: Opciones adicionales del LDAP, como
LDAP_OPT_PROTOCOL_VERSION
o LDAP_OPT_NETWORK_TIMEOUT
. Ver
php.net
para mas opciones válidas.
Le permite usar un callback para la identificación. Esto es útil para identificadores simples o creación rápida de prototipos.
Opciones de configuración:
callback: Por defecto es null
y arrojará una excepción. Se requiere
suministrar un callback válido en esta opción para usar el
autenticador.
Los identificadores callback pueden retornar ArrayAccess|null
para resultados simples,
o un Authentication\Authenticator\Result
si se quiere enviar mensajes de
error:
// Un indentificador callback simple
$authenticationService->loadIdentifier('Authentication.Callback', [
'callback' => function($data) {
// Hacer la lógica del identificador
// Devuelve un array con el usuario identificado o nulo si falla.
if ($result) {
return $result;
}
return null;
}
]);
// Usar un result object para devolver mensajes de error.
$authenticationService->loadIdentifier('Authentication.Callback', [
'callback' => function($data) {
// Hacer la lógica del identificador
if ($result) {
return new Result($result, Result::SUCCESS);
}
return new Result(
null,
Result::FAILURE_OTHER,
['message' => 'Removed user.']
);
}
]);
Los resolvers de identidades proporcionan adaptadores para diferentes fuentes de datos. Le permiten controlar en qué identidades de origen buscar. Están separados de los identificadores para que puedan intercambiarse independientemente del método del identificador (formulario, jwt, autenticación básica).
Es el resolver de dentidad para el ORM de CakePHP.
Opciones de configuración:
userModel: El modelo donde están localizadas las indentidades. Por defecto es
Users
.
finder: El finder a usar con el modelo. Por defecto es all
.
Puede leer mas sobre los finders de los modelos aquí.
Para usar el resolver ORM se requiere tener cakephp/orm
en su archivo
composer.json
(si no estás usando el framework CakePHP completo).
Cualquier ORM o fuente de datos puede ser adaptada para trabajar como
autenticación al crear un resolver. Los resolvers deben implementar
Authentication\Identifier\Resolver\ResolverInterface
y debe estar
bajo el namespace App\Identifier\Resolver
.
Un resolver puede ser configurado usando las opciones de configuración
de resolver
:
$service->loadIdentifier('Authentication.Password', [
'resolver' => [
// puede ser un nombre de clase completo: \Some\Other\Custom\Resolver::class
'className' => 'MyResolver',
// Suministrar opciones adicionales al constructor del resolver.
'option' => 'value'
]
]);
O usando un setter inyectado:
$resolver = new \App\Identifier\Resolver\CustomResolver();
$identifier = $service->loadIdentifier('Authentication.Password');
$identifier->setResolver($resolver);