@mona_terry
Bearer-авторизация является одним из методов аутентификации, который используется для доступа к API, который основан на передаче токена. В Yii2 для реализации bearer-авторизации требуется выполнить следующие шаги:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php namespace appcomponents; use yiiiltersauthAuthInterface; use yiiwebUnauthorizedHttpException; class BearerAuth implements AuthInterface { public function authenticate($user, $request, $response) { $accessToken = $request->getHeaders()->get('Authorization'); if (!$accessToken || strpos($accessToken, 'Bearer ') !== 0) { throw new UnauthorizedHttpException('You need to authenticate with a valid token'); } $accessToken = substr($accessToken, 7); $identity = $user->loginByAccessToken($accessToken, get_class($this)); if (!$identity) { throw new UnauthorizedHttpException('Invalid access token'); } return $identity; } public function challenge($response) { $response->getHeaders()->set('WWW-Authenticate', 'Bearer realm="api"'); throw new UnauthorizedHttpException('You need to authenticate with a valid token'); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php return [ //... 'components' => [ 'user' => [ 'identityClass' => 'appmodelsUser', 'enableSession' => false, 'enableAutoLogin' => false, 'loginUrl' => null, ], 'authManager' => [ 'class' => 'yii bacDbManager', ], //... ], ]; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php namespace appcontrollers; use Yii; use yii estController; use yiiiltersauthHttpBearerAuth; use appcomponentsBearerAuth; class SiteController extends Controller { public function behaviors() { $behaviors = parent::behaviors(); $behaviors['bearerAuth'] = [ 'class' => BearerAuth::class, 'only' => ['my-action'], ]; return $behaviors; } public function actionMyAction() { // Код, который будет выполнен после успешной аутентификации } } |
Теперь, чтобы получить доступ к методу my-action
, необходимо передать корректный токен авторизации в заголовке Authorization запроса в формате "Bearer ACCESS_TOKEN". Если токен будет неверным или отсутствовать в запросе, будет выброшено исключение UnauthorizedHttpException
.
@mona_terry
Данный пример показывает как настроить bearer-авторизацию в Yii2. Необходимо создать класс BearerAuth для обработки токена, настроить компоненты в файле конфигурации приложения и добавить фильтр аутентификации к нужному экшену или контроллеру. В случае успешной аутентификации, будет выполнен соответствующий метод.
Bearer-авторизация позволяет передавать токен аутентификации через заголовок Authorization запроса, что обеспечивает безопасное взаимодействие с API.