2.Specify which authentication methods you plan to use by configuring the `authenticator` behavior
2.Укажите, какие методы аутентификации вы планируете использовать, настроив поведение `authenticator`
in your REST controller classes.
в ваших классах REST-контроллеров.
3.Implement [[yii\web\IdentityInterface::findIdentityByAccessToken()]] in your [[yii\web\User::identityClass|user identity class]].
3.Реализуйте метод [[yii\web\IdentityInterface::findIdentityByAccessToken()]] *в вашем [[yii\web\User::identityClass|классе UserIdentity]]*.
Step 1 is not required but is recommended for RESTful APIs which should be stateless. When[[yii\web\User::enableSession|enableSession]]
Шаг 1 не обязателен, но рекомендуется его все-таки выполнить, так как RESTful API не должны сохранять информацию о состоянии клиента. Когда свойство[[yii\web\User::enableSession|enableSession]]
is false, the user authentication status will NOT be persisted across requests using sessions. Instead, authentication
установлено в false, состояние аутентификации пользователя НЕ БУДЕТ постоянно
will be performed for every request, which is accomplished by Step 2 and 3.
сохраняться между запросами с использованием сессий. Вместо этого аутентификация будет выполняться для каждого запроса, что достигается шагами 2 и 3.
> Tip: You may configure [[yii\web\User::enableSession|enableSession]] of the `user` application component
> Подсказка: если вы разрабатываете RESTful API в пределах приложения, вы можете настроить свойство
in application configurations if you are developing RESTful APIs in terms of an application. If you develop
[[yii\web\User::enableSession|enableSession]] компонента приложения `user` в конфигурации приложения. Если вы разрабатываете
RESTful APIs as a module, you may put the following line in the module's `init()` method, like the following:
RESTful API как модуль, можете добавить следующую строчку в метод `init()` модуля:
> ```php
> ```php
public function init()
public function init()
{
{
...
@@ -45,7 +45,7 @@ public function init()
...
@@ -45,7 +45,7 @@ public function init()
}
}
```
```
For example, to use HTTP Basic Auth, you may configure `authenticator` as follows,
Например, для использования HTTP Basic Auth, вы можете настроить свойство `authenticator` следующим образом:
```php
```php
use yii\filters\auth\HttpBasicAuth;
use yii\filters\auth\HttpBasicAuth;
...
@@ -60,7 +60,7 @@ public function behaviors()
...
@@ -60,7 +60,7 @@ public function behaviors()
}
}
```
```
If you want to support all three authentication methods explained above, you can use `CompositeAuth` like the following,
Если вы хотите включить поддержку всех трех описанных выше методов аутентификации, можете использовать `CompositeAuth`:
```php
```php
use yii\filters\auth\CompositeAuth;
use yii\filters\auth\CompositeAuth;
...
@@ -83,12 +83,12 @@ public function behaviors()
...
@@ -83,12 +83,12 @@ public function behaviors()
}
}
```
```
Each element in `authMethods` should be an auth method class name or a configuration array.
Каждый элемент в массиве `authMethods` должен быть названием класса метода аутентификации или массивом настроек.
Implementation of `findIdentityByAccessToken()` is application specific. For example, in simple scenarios
Реализация метода `findIdentityByAccessToken()` определяется особенностями приложения. Например, в простом варианте,
when each user can only have one access token, you may store the access token in an `access_token` column
когда у каждого пользователя есть только один токен доступа, вы можете хранить этот токен в поле `access_token`
in the user table. The method can then be readily implemented in the `User` class as follows,
таблицы пользователей. В этом случае метод `findIdentityByAccessToken()` может быть легко реализован в классе `User` следующим образом:
```php
```php
use yii\db\ActiveRecord;
use yii\db\ActiveRecord;
...
@@ -103,22 +103,22 @@ class User extends ActiveRecord implements IdentityInterface
...
@@ -103,22 +103,22 @@ class User extends ActiveRecord implements IdentityInterface
}
}
```
```
After authentication is enabled as described above, for every API request, the requested controller
После включения аутентификации описанным выше способом при каждом запросе к API запрашиваемый контроллер
will try to authenticate the user in its `beforeAction()` step.
будет пытаться аутентифицировать пользователя в своем методе `beforeAction()`.
If authentication succeeds, the controller will perform other checks (such as rate limiting, authorization)
Если аутентификация прошла успешно, контроллер выполнит другие проверки (ограничение на количество запросов, авторизация)
and then run the action. The authenticated user identity information can be retrieved via `Yii::$app->user->identity`.
и затем выполнит действие. *Информация о подлинности аутентифицированного пользователя может быть получена из объекта `Yii::$app->user->identity`*.
If authentication fails, a response with HTTP status 401 will be sent back together with other appropriate headers
Если аутентификация прошла неудачно, будет возвращен ответ с HTTP-кодом состояния 401 вместе с другими необходимыми заголовками
(such as a `WWW-Authenticate` header for HTTP Basic Auth).
(такими, как заголовок `WWW-Authenticate` для HTTP Basic Auth).
## Authorization <a name="authorization"></a>
## Авторизация <a name="authorization"></a>
After a user is authenticated, you probably want to check if he or she has the permission to perform the requested
После аутентификации пользователя вы, вероятно, захотите проверить, есть ли у него или у нее разрешение на выполнение запрошенного
action for the requested resource. This process is called *authorization* which is covered in detail in
действия с запрошенным ресурсом. Этот процесс называется *авторизацией* и подробно описан
the [Authorization section](security-authorization.md).
в разделе [Авторизация](security-authorization.md).
If your controllers extend from [[yii\rest\ActiveController]], you may override
Если ваши контроллеры унаследованы от [[yii\rest\ActiveController]], вы можете переопределить
the [[yii\rest\Controller::checkAccess()|checkAccess()]] method to perform authorization check. The method
метод [[yii\rest\Controller::checkAccess()|checkAccess()]] для выполнения авторизации. Этот метод будет вызываться
will be called by the built-in actions provided by[[yii\rest\ActiveController]].