RESTful API - базовая авторзация парой логин/пароль

Всё что касается построения API
Ответить
RGF
Сообщения: 213
Зарегистрирован: 2013.01.29, 13:19

RESTful API - базовая авторзация парой логин/пароль

Сообщение RGF »

Подскажите, как можно авторизоваться не token'ом, а парой логин/пароль, используя базовую авторизацию в RESTful API
Последний раз редактировалось RGF 2014.07.25, 15:03, всего редактировалось 1 раз.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: RESTful API - базовая авторзация

Сообщение anton44eg »

HttpBasicAuth
RGF
Сообщения: 213
Зарегистрирован: 2013.01.29, 13:19

Re: RESTful API - базовая авторзация

Сообщение RGF »

anton44eg писал(а):HttpBasicAuth
так он как раз и предполагает использование токена?

Код: Выделить всё

<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\filters\auth;

use Yii;
use yii\web\UnauthorizedHttpException;

/**
 * HttpBasicAuth is an action filter that supports the HTTP Basic authentication method.
 *
 * You may use HttpBasicAuth by attaching it as a behavior to a controller or module, like the following:
 *
 * ```php
 * public function behaviors()
 * {
 *     return [
 *         'basicAuth' => [
 *             'class' => \yii\filters\auth\HttpBasicAuth::className(),
 *         ],
 *     ];
 * }
 * ```
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
class HttpBasicAuth extends AuthMethod
{
    /**
     * @var string the HTTP authentication realm
     */
    public $realm = 'api';
    /**
     * @var callable a PHP callable that will authenticate the user with the HTTP basic auth information.
     * The callable receives a username and a password as its parameters. It should return an identity object
     * that matches the username and password. Null should be returned if there is no such identity.
     *
     * The following code is a typical implementation of this callable:
     *
     * ```php
     * function ($username, $password) {
     *     return \app\models\User::findOne([
     *         'username' => $username,
     *         'password' => $password,
     *     ]);
     * }
     * ```
     *
     * If this property is not set, the username information will be considered as an access token
     * while the password information will be ignored. The [[\yii\web\User::loginByAccessToken()]]
     * method will be called to authenticate and login the user.
     */
    public $auth;


    /**
     * @inheritdoc
     */
    public function authenticate($user, $request, $response)
    {
        $username = $request->getAuthUser();
        $password = $request->getAuthPassword();

        if ($this->auth) {
            if ($username !== null || $password !== null) {
                $identity = call_user_func($this->auth, $username, $password);
                if ($identity !== null) {
                    $user->setIdentity($identity);
                } else {
                    $this->handleFailure($response);
                }
                return $identity;
            }
        } elseif ($username !== null) {
            $identity = $user->loginByAccessToken($username);
            if ($identity === null) {
                $this->handleFailure($response);
            }
            return $identity;
        }

        return null;
    }

    /**
     * @inheritdoc
     */
    public function handleFailure($response)
    {
        $response->getHeaders()->set('WWW-Authenticate', "Basic realm=\"{$this->realm}\"");
        throw new UnauthorizedHttpException('You are requesting with an invalid access token.');
    }
}

 
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: RESTful API - базовая авторзация парой логин/пароль

Сообщение anton44eg »

хоть в википедию загляните http://en.wikipedia.org/wiki/Basic_acce ... entication
RGF
Сообщения: 213
Зарегистрирован: 2013.01.29, 13:19

Re: RESTful API - базовая авторзация парой логин/пароль

Сообщение RGF »

anton44eg писал(а):хоть в википедию загляните http://en.wikipedia.org/wiki/Basic_acce ... entication
"HTTP user agent to provide a user name and password when making a request"
и

Код: Выделить всё

 $identity = $user->loginByAccessToken($username);

Код: Выделить всё

    public function loginByAccessToken($token)
    {
        /** @var IdentityInterface $class */
        $class = $this->identityClass;
        $identity = $class::findIdentityByAccessToken($token);
        $this->setIdentity($identity);

        return $identity;
     
RGF
Сообщения: 213
Зарегистрирован: 2013.01.29, 13:19

Re: RESTful API - базовая авторзация парой логин/пароль

Сообщение RGF »

Поясните пожалуйста, тут идет вызов формы для ввода логина пароля:

https://github.com/githubjeka/angular-y ... er.php#L12

тут токена
https://github.com/githubjeka/angular-y ... r.php#L100

а где непосредственно вызывается аутентификация и вызов запроса базовой авторизации?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: RESTful API - базовая авторзация парой логин/пароль

Сообщение yiijeka »

!$model->login()) - вызывается аутентификация. Если верно, то пользователь проходит аутентификацию и в клиент посылается Authorization: Basic, потом на клиенте он сохраняется и проверяется при каждом запросе .
И $model->validate(); избыточна в данном действии контроллера. Но на тот момент сделал так, сейчас уже переписал многое. Как нибудь обновлю на досуге.

И ещё HTTP Basic Auth: используйте, когда клиент и сервер находится на одном сервере. Если между сервером и клиентом "физический" разрыв, то лучше использовать токен или OAuth 2 без сессий User::enableSession(false)
RGF
Сообщения: 213
Зарегистрирован: 2013.01.29, 13:19

Re: RESTful API - базовая авторзация парой логин/пароль

Сообщение RGF »

yiijeka писал(а):!$model->login()) - вызывается аутентификация. Если верно, то пользователь проходит аутентификацию и в клиент посылается Authorization: Basic, потом на клиенте он сохраняется и проверяется при каждом запросе .
И $model->validate(); избыточна в данном действии контроллера. Но на тот момент сделал так, сейчас уже переписал многое. Как нибудь обновлю на досуге.

И ещё HTTP Basic Auth: используйте, когда клиент и сервер находится на одном сервере. Если между сервером и клиентом "физический" разрыв, то лучше использовать токен или OAuth 2 без сессий User::enableSession(false)
"и в клиент посылается Authorization: Basic" - боюсь не понял, по моему, просто авторизация через форму?
Ответить