識別子

識別子は、オーセンティケーターによる要求から抽出された情報に基づいて、ユーザーまたはサービスを識別します。識別子は、loadIdentifierメソッドのオプションを取ることができます。 パスワード識別子を使用する全体的な例は次のようになります:

Identifiers will identify an user or service based on the information that was extracted from the request by the authenticators. Identifiers can take options in the loadIdentifier method. A holistic example of using the Password Identifier looks like:
$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'
            ],
        ]
    ]
]);

パスワード

パスワード識別子は、渡された資格情報をデータソースと照合します。

The password identifier checks the passed credentials against a datasource.

構成オプション:

Configuration options:
  • fields: ルックアップのフィールド。デフォルトは['username' => 'username', 'password' => 'password']です。usernameを配列に設定することもできます。例えば ['username' => ['username', 'email'], 'password' => 'password']を使用すると、ユーザー名またはメールの列の値を一致させることができます。
  • resolver: IDリゾルバー。デフォルトは、CakePHP ORMを使用するAuthentication.Ormです。
  • passwordHasher: パスワードハッシュ。デフォルトはDefaultPasswordHasher::classです。
  • fields: The fields for the lookup. Default is ['username' => 'username', 'password' => 'password']. You can also set the username to an array. For e.g. using ['username' => ['username', 'email'], 'password' => 'password'] will allow you to match value of either username or email columns.
  • resolver: The identity resolver. Default is Authentication.Orm which uses CakePHP ORM.
  • passwordHasher: Password hasher. Default is DefaultPasswordHasher::class.

トークン

渡されたトークンをデータソースと照合します。

Checks the passed token against a datasource.

構成オプション:

Configuration options:
  • tokenField: チェックするデータベースのフィールド。デフォルトはtokenです。
  • dataField: オーセンティケーターから渡されたデータのフィールド。デフォルトはtokenです。
  • resolver: IDリゾルバー。デフォルトは、CakePHP ORMを使用するAuthentication.Ormです。
  • tokenField: The field in the database to check against. Default is token.
  • dataField: The field in the passed data from the authenticator. Default is token.
  • resolver: The identity resolver. Default is Authentication.Orm which uses CakePHP ORM.

JWTサブジェクト

渡されたJWTトークンをデータソースと照合します。

Checks the passed JWT token against a datasource.
  • tokenField: チェックするデータベースのフィールド。デフォルトはidです。
  • dataField: ユーザー識別子を取得するペイロードキー。デフォルトはsubです。
  • resolver: IDリゾルバー。デフォルトは、CakePHP ORMを使用するAuthentication.Ormです。
  • tokenField: The field in the database to check against. Default is id.
  • dataField: The payload key to get user identifier from. Default is sub.
  • resolver: The identity resolver. Default is Authentication.Orm which uses CakePHP ORM.

LDAP

渡された資格情報をLDAPサーバーと照合します。この識別子には、PHP LDAP拡張機能が必要です。

Checks the passed credentials against a LDAP server. This identifier requires the PHP LDAP extension.
  • fields: ルックアップのフィールド。デフォルトは['username' => 'username', 'password' => 'password']です。
  • host: LDAPサーバーのFQDN。
  • port: LDAPサーバーのポート。デフォルトは389です。
  • bindDN: 認証するユーザーの識別名。 呼び出し可能でなければなりません。 匿名バインドはサポートされていません。
  • ldap: 拡張アダプタ。デフォルトは\Authentication\Identifier\Ldap\ExtensionAdapterです。it implements the AdapterInterfaceを実装している場合、カスタムオブジェクト/クラス名をここに渡すことができます。
  • options: LDAP_OPT_PROTOCOL_VERSIONLDAP_OPT_NETWORK_TIMEOUTなどの追加のLDAPオプション。 より有効なオプションについては、php.netを参照してください。
  • fields: The fields for the lookup. Default is ['username' => 'username', 'password' => 'password'].
  • host: The FQDN of your LDAP server.
  • port: The port of your LDAP server. Defaults to 389.
  • bindDN: The Distinguished Name of the user to authenticate. Must be a callable. Anonymous binds are not supported.
  • ldap: The extension adapter. Defaults to \Authentication\Identifier\Ldap\ExtensionAdapter. You can pass a custom object/classname here if it implements the AdapterInterface.
  • options: Additional LDAP options, like LDAP_OPT_PROTOCOL_VERSION or LDAP_OPT_NETWORK_TIMEOUT. See php.net for more valid options.

コールバック

識別のためにコールバックを使用できます。これは、単純な識別子やクイックプロトタイピングに役立ちます。

Allows you to use a callback for identification. This is useful for simple identifiers or quick prototyping.

構成オプション:

Configuration options:
  • callback: デフォルトはnullであり、例外が発生します。オーセンティケーターを使用するには、このオプションに有効なコールバックを渡す必要があります。
  • callback: Default is null and will cause an exception. You’re required to pass a valid callback to this option to use the authenticator.

コールバック識別子は、単純な結果の場合はnull|ArrayAccessを返し、エラーメッセージを転送する場合は、Authentication\Authenticator\Resultを返します:

Callback identifiers can either return null|ArrayAccess for simple results, or an Authentication\Authenticator\Result if you want to forward error messages:
// A simple callback identifier
$authenticationService->loadIdentifier('Authentication.Identifier', [
    '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.Identifier', [
    'callback' => function($data) {
        // do identifier logic

        if ($result) {
            return new Result($result, Result::SUCCESS);
        }

        return new Result(
            null,
            Result::FAILURE_OTHER,
            ['message' => 'Removed user.']
        );
    }
]);

Identity リゾルバー

IDリゾルバーは、さまざまなデータソース用のアダプターを提供します。検索するソースIDを制御できます。それらは識別子から分離されているため、識別子メソッド(フォーム、jwt、基本認証)から独立して交換できます。

Identity resolvers provide adapters for different datasources. They allow you to control which source identities are searched in. They are separate from the identifiers so that they can be swapped out independently from the identifier method (form, jwt, basic auth).

ORM リゾルバー

CakePHP ORMのIDリゾルバー。

Identity resolver for the CakePHP ORM.

構成オプション:

Configuration options:
  • userModel: ユーザーモデルのIDは次の場所にあります。デフォルトはUsersです。
  • finder: モデルで使用するファインダー。デフォルトはallです。
  • userModel: The user model identities are located in. Default is Users.
  • finder: The finder to use with the model. Default is all.

ORMリゾルバーを使用するには、composer.jsonファイルにcakephp/ormが必要です。

In order to use ORM resolver you must require cakephp/orm in your composer.json file.

独自のリゾルバーを作成する

ORMまたはデータソースは、リゾルバーを作成することにより、認証で動作するように適合させることができます。リゾルバーはAuthentication\Identifier\Resolver\ResolverInterfaceを実装する必要があり、App\Identifier\Resolver名前空間の下に存在する必要があります。

Any ORM or datasource can be adapted to work with authentication by creating a resolver. Resolvers must implement Authentication\Identifier\Resolver\ResolverInterface and should reside under App\Identifier\Resolver namespace.

リゾルバーはリゾルバー構成オプションを使用して構成できます:

Resolver can be configured using resolver config option:
$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'
    ]
]);

またはセッターを使用して注入されます:

Or injected using a setter:
$resolver = new \App\Identifier\Resolver\CustomResolver();
$identifier = $service->loadIdentifier('Authentication.Password');
$identifier->setResolver($resolver);