标识符将根据身份验证器从请求中提取的信息来识别用户或服务。标识符可以在 loadIdentifier
方法中接受选项。一个完整的密码标识符的使用示例如下:
$service->loadIdentifier('Authentication.Password', [
'fields' => [
'username' => 'email',
'password' => 'passwd',
],
'resolver' => [
'className' => 'Authentication.Orm',
'userModel' => 'Users',
'finder' => 'active', // default: 'all'
],
'passwordHasher' => [
'className' => 'Authentication.Fallback',
'hashers' => [
'Authentication.Default',
[
'className' => 'Authentication.Legacy',
'hashType' => 'md5',
],
],
],
]);
密码标识符将传入的凭据与数据源进行比对。
配置选项
fields: 用于查找的字段。默认值为 ['username' => 'username', 'password' => 'password']
。您也可以将 username
设置为数组。例如,使用 ['username' => ['username', 'email'], 'password' => 'password']
将允许您匹配用户名或电子邮件列的值。
resolver: 身份解析器。默认值为 Authentication.Orm
,它使用 CakePHP ORM。
passwordHasher: 密码哈希器。默认值为 DefaultPasswordHasher::class
。
将传入的令牌与数据源进行比对。
配置选项
tokenField: 数据库中要比对的字段。默认值为 token
。
dataField: 传入的身份验证器数据中的字段。默认值为 token
。
resolver: 身份解析器。默认值为 Authentication.Orm
,它使用 CakePHP ORM。
hashAlgorithm: 在将传入的令牌与 tokenField
进行比对之前,用于对传入的令牌进行哈希的算法。推荐的值为 sha256
。默认值为 null
。
将传入的 JWT 令牌与数据源进行比对。
配置选项
tokenField: 数据库中要比对的字段。默认值为 id
。
dataField: 用于从有效负载中获取用户标识符的键。默认值为 sub
。
resolver: 身份解析器。默认值为 Authentication.Orm
,它使用 CakePHP ORM。
将传入的凭据与 LDAP 服务器进行比对。此标识符需要 PHP LDAP 扩展。
配置选项
fields: 用于查找的字段。默认值为 ['username' => 'username', 'password' => 'password']
。
host: LDAP 服务器的 FQDN。
port: LDAP 服务器的端口。默认为 389
。
bindDN: 用于身份验证的用户的名区分名称。必须是一个可调用对象。不支持匿名绑定。
ldap: 扩展适配器。默认为 \Authentication\Identifier\Ldap\ExtensionAdapter
。如果您的对象/类名实现了 AdapterInterface
,您可以在此处传入它。
tls
: 布尔值。如果为 true
,则尝试在连接上启动 TLS。还包括 LDAP 配置选项,例如 LDAP_OPT_PROTOCOL_VERSION
或 LDAP_OPT_NETWORK_TIMEOUT
。有关更多有效选项,请参见
允许您使用回调进行身份验证。这对于简单的标识符或快速原型设计非常有用。
配置选项
callback: 默认值为 null
,并将引发异常。您需要将一个有效的回调传入此选项才能使用身份验证器。
回调标识符可以返回 null|ArrayAccess
用于简单结果,或者返回 Authentication\Authenticator\Result
如果您想转发错误消息
// A simple callback identifier
$authenticationService->loadIdentifier('Authentication.Callback', [
'callback' => function($data) {
// do identifier logic
// Return an array of the identified user or null for failure.
if ($result) {
return $result;
}
return null;
},
]);
// Using a result object to return error messages.
$authenticationService->loadIdentifier('Authentication.Callback', [
'callback' => function($data) {
// do identifier logic
if ($result) {
return new Result($result, Result::SUCCESS);
}
return new Result(
null,
Result::FAILURE_OTHER,
['message' => 'Removed user.']
);
},
]);
身份解析器为不同的数据源提供适配器。它们允许您控制要搜索哪些源身份。它们与标识符分开,以便它们可以独立于标识符方法(表单、jwt、基本身份验证)进行交换。
CakePHP ORM 的身份解析器。
配置选项
userModel: 身份所在的用户模型。默认值为 Users
。
finder: 要与模型一起使用的查找器。默认值为 all
。您可以在 此处 阅读有关模型查找器的更多信息。
为了使用 ORM 解析器,您必须在您的 composer.json
文件中(如果您还没有使用完整的 CakePHP 框架)要求 cakephp/orm
。
通过创建解析器,可以将任何 ORM 或数据源适配到身份验证。解析器必须实现 Authentication\Identifier\Resolver\ResolverInterface
,并且应该位于 App\Identifier\Resolver
命名空间下。
解析器可以使用 resolver
配置选项进行配置
$service->loadIdentifier('Authentication.Password', [
'resolver' => [
// can be a full class name: \Some\Other\Custom\Resolver::class
'className' => 'MyResolver',
// Pass additional options to the resolver constructor.
'option' => 'value',
],
]);
或者使用 setter 进行注入
$resolver = new \App\Identifier\Resolver\CustomResolver();
$identifier = $service->loadIdentifier('Authentication.Password');
$identifier->setResolver($resolver);