Identifiersは認証者がリクエストから抽出した情報に基づいてユーザやサービスを識別します。
Identifiersは loadIdentifier
メソッドでオプション指定することができます。
パスワード識別子を使用した全体的な例は次のようになります。:
$service->loadIdentifier('Authentication.Password', [
'fields' => [
'username' => 'email',
'password' => 'passwd',
],
'resolver' => [
'className' => 'Authentication.Orm',
'finder' => 'active'
],
'passwordHasher' => [
'className' => 'Authentication.Fallback',
'hashers' => [
'Authentication.Default',
[
'className' => 'Authentication.Legacy',
'hashType' => 'md5'
],
]
]
]);
パスワード識別子は、渡された資格情報をデータソースに対してチェックします。
設定オプション:
fields: 調べるためのフィールドです。デフォルトは ['username' => 'username', 'password' => 'password']
。
ユーザー名
を配列にすることができます。
例えば、 ['username' => ['username', 'email'], 'password' => 'password']
を使うと、
ユーザ名とemailのどちらかのカラムの値をマッチさせることができます。
resolver: 同一性を決意します. デフォルトは Authentication.Orm
で、CakePHPのORMを使用しています。
passwordHasher: パスワードハッシャー. デフォルトは、
DefaultPasswordHasher::class
。
渡されたトークンをデータソースと照合します。
設定オプション:
tokenField: データベース内のフィールドをチェックします。 デフォルトは token
です。
dataField: 認証器から渡されたデータの中のフィールド。デフォルトは token
です。
resolver: 同一性を決意します。デフォルトは Authentication.Orm
で、CakePHPのORMを使用しています。
渡された 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
を実装しているならば、そのobject/classnameをここに渡すことができます。
options: 付加的な LDAP オプション, like LDAP_OPT_PROTOCOL_VERSION
または LDAP_OPT_NETWORK_TIMEOUT
のようなものです。
php.net をみてより多くのオプションを参照してください。
識別のためにコールバックを使用できるようにします。 シンプルな識別子やクイックプロトタイピングに便利です。
設定オプション:
callback: デフォルトは null
で例外が発生します。
認証機能を使用するには、このオプションに有効なコールバックを渡す必要があります。
コールバックの識別子は、単純な結果を得るために null|ArrayAccess
を返すこともできます。,
または、エラーメッセージを転送したい場合、 Authentication\Authenticator\Result
を使用します。:
// シンプルなコールバック識別子
$authenticationService->loadIdentifier('Authentication.Callback', [
'callback' => function($data) {
// 識別子のロジック
// 識別されたユーザの配列を返すか、失敗した場合はnullを返します。
if ($result) {
return $result;
}
return null;
}
]);
// エラーメッセージを返すために結果オブジェクトを使用します。
$authenticationService->loadIdentifier('Authentication.Callback', [
'callback' => function($data) {
// 識別子のロジック
if ($result) {
return new Result($result, Result::SUCCESS);
}
return new Result(
null,
Result::FAILURE_OTHER,
['message' => 'Removed user.']
);
}
]);
Identity resolvers は、異なるデータソース用のアダプタを提供する。 これにより、どのソースのアイデンティティを検索するかを制御することができます。 これらは識別子とは別個のものであり、 識別子の方法(form, jwt, basic auth)とは独立してスワップアウトできるようになっています。
CakePHP ORM の Identity resolvers。
設定オプション:
userModel: ユーザーモデルのアイデンティティが配置されています。 デフォルトは Users
。
finder: モデルと一緒に使うファインダー. デフォルトは all
。
ORM resolverを使用するには composer.json
ファイルの中に cakephp/orm
が必要です。
どんなORMやデータソースでも、リゾルバを作成することで認証に対応できるようにすることができます。
リゾルバは、App\Identifier\Resolver
の名前空間の下に、
Authentication\Identifier\Resolver\ResolverInterface
を実装しなければなりません。
リゾルバの設定は``resolver`` のconfigオプションを使って行えます。:
$service->loadIdentifier('Authentication.Password', [
'resolver' => [
// name: \Some\Other\Custom\Resolver::class フルのクラス名です。
'className' => 'MyResolver',
// レゾルバのコンストラクタに追加のオプションを渡します。
'option' => 'value'
]
]);
またはセッターを使用して注入してください。:
$resolver = new \App\Identifier\Resolver\CustomResolver();
$identifier = $service->loadIdentifier('Authentication.Password');
$identifier->setResolver($resolver);