yiisoft/auth

Yii 身份验证

3.1.1 2024-05-06 12:26 UTC

This package is auto-updated.

Last update: 2024-08-31 11:48:33 UTC


README

Yii

Yii Auth


Latest Stable Version Total Downloads Build status Code Coverage Mutation testing badge static analysis type-coverage

该包提供了各种身份验证方法、一组抽象来实现您的应用程序,以及一个用于身份验证身份的 PSR-15 中间件。

要求

  • PHP 8.0 或更高版本。

安装

composer require yiisoft/auth

通用用法

配置中间件并将其添加到中间件堆栈

$identityRepository = getIdentityWithTokenRepository(); // \Yiisoft\Auth\IdentityRepositoryInterface
$authenticationMethod = new \Yiisoft\Auth\Method\HttpBasic($identityRepository);

$middleware = new \Yiisoft\Auth\Middleware\Authentication(
    $authenticationMethod,
    $responseFactory, // PSR-17 ResponseFactoryInterface
    $failureHandler // optional, \Yiisoft\Auth\Handler\AuthenticationFailureHandler by default
);

$middlewareDispatcher->addMiddleware($middleware);

为了在以下中间件中获得身份实例,请使用请求实例的 getAttribute() 方法

public function actionIndex(\Psr\Http\Message\ServerRequestInterface $request): \Psr\Http\Message\ResponseInterface
{
    $identity = $request->getAttribute(\Yiisoft\Auth\Middleware\Authentication::class);
    // ...
}

HTTP 基本身份验证

基本 HTTP 身份验证通常用于在浏览器中输入登录名和密码。凭据通过 $_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW'] 传递。

$authenticationMethod = (new \Yiisoft\Auth\Method\HttpBasic($identityRepository))
    ->withRealm('Admin')
    ->withAuthenticationCallback(static function (
        ?string $username,
        #[\SensitiveParameter] ?string $password,
        \Yiisoft\Auth\IdentityWithTokenRepositoryInterface $identityRepository
    ): ?\Yiisoft\Auth\IdentityInterface {
        return $identityRepository->findIdentityByToken($username, \Yiisoft\Auth\Method\HttpBasic::class);
    });

域通常是在浏览器提示中要求输入登录名和密码时看到的。在上方设置的定制身份验证回调与未指定时的默认行为相同。

HTTP 携带者身份验证

携带者 HTTP 身份验证通常用于 API。认证令牌通过 WWW-Authenticate 标头传递。

$authenticationMethod = new \Yiisoft\Auth\Method\HttpBearer($identityRepository);

自定义 HTTP 标头身份验证

如果您不想使用携带者令牌身份验证,则可以使用自定义 HTTP 标头。

 $authenticationMethod = (new \Yiisoft\Auth\Method\HttpHeader($identityRepository))
     ->withHeaderName('X-Api-Key')
     ->withPattern('/(.*)/'); // default

在上面的示例中,我们使用 X-Api-Key 标头的完整值作为令牌。

查询参数身份验证

此身份验证方法主要用于无法发送头部的客户端。如果您没有此类客户端,我们建议不要使用它。

$authenticationMethod = (new \Yiisoft\Auth\Method\QueryParameter($identityRepository))
    ->withParameterName('token');

使用多个身份验证方法

要使用多个身份验证方法,请使用 Yiisoft\Auth\Method\Composite

$authenticationMethod = new \Yiisoft\Auth\Method\Composite([
    $bearerAuthenticationMethod,
    $basicAuthenticationMethod
]);

扩展和集成点

  • \Yiisoft\Auth\IdentityInterface 应由您的应用程序身份类实现。通常,这是 User
  • \Yiisoft\Auth\IdentityRepositoryInterface 应由您的应用程序身份存储库类实现。通常,这是 UserIdentity
  • \Yiisoft\Auth\IdentityWithTokenRepositoryInterface 可以由您的应用程序身份存储库类额外实现,如果需要基于令牌的身份验证。通常,这是 UserIdentity
  • \Yiisoft\Auth\AuthenticationMethodInterface 可以实现以提供您自己的身份验证方法。

文档

如果您需要帮助或有问题,请访问 Yii 论坛,这是一个不错的选择。您还可以查看其他 Yii 社区资源

许可证

Yii Auth 是免费软件。它根据 BSD 许可证的条款发布。有关更多信息,请参阅 LICENSE

Yii 软件 维护。

支持项目

Open Collective

关注更新

Official website Twitter Telegram Facebook Slack