Как работает bearer атвторизация в yii2

Пользователь

от mona_terry , в категории: PHP , год назад

Как работает bearer атвторизация в yii2

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от lori_jast , год назад

@mona_terry 

Bearer-авторизация является одним из методов аутентификации, который используется для доступа к API, который основан на передаче токена. В Yii2 для реализации bearer-авторизации требуется выполнить следующие шаги:

  1. Создать класс для аутентификации, который будет обрабатывать полученный токен. Этот класс должен реализовывать интерфейс yii iltersauthAuthInterface и содержать методы authenticate и challenge.
 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 yiiiltersauthAuthInterface;
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. Настроить компонент авторизации в файле конфигурации приложения.
 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. Настроить фильтр аутентификации для нужного экшена или контроллера, используя созданный ранее класс BearerAuth.
 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 yiiiltersauthHttpBearerAuth;
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.