RESTful API - базовая авторзация парой логин/пароль
RESTful API - базовая авторзация парой логин/пароль
Подскажите, как можно авторизоваться не token'ом, а парой логин/пароль, используя базовую авторизацию в RESTful API
Последний раз редактировалось RGF 2014.07.25, 15:03, всего редактировалось 1 раз.
Re: RESTful API - базовая авторзация
HttpBasicAuth
Re: RESTful API - базовая авторзация
так он как раз и предполагает использование токена?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.');
}
}
Re: RESTful API - базовая авторзация парой логин/пароль
хоть в википедию загляните http://en.wikipedia.org/wiki/Basic_acce ... entication
Re: RESTful API - базовая авторзация парой логин/пароль
"HTTP user agent to provide a user name and password when making a request"anton44eg писал(а):хоть в википедию загляните http://en.wikipedia.org/wiki/Basic_acce ... entication
и
Код: Выделить всё
$identity = $user->loginByAccessToken($username);
Код: Выделить всё
public function loginByAccessToken($token)
{
/** @var IdentityInterface $class */
$class = $this->identityClass;
$identity = $class::findIdentityByAccessToken($token);
$this->setIdentity($identity);
return $identity;
Re: RESTful API - базовая авторзация парой логин/пароль
Поясните пожалуйста, тут идет вызов формы для ввода логина пароля:
https://github.com/githubjeka/angular-y ... er.php#L12
тут токена
https://github.com/githubjeka/angular-y ... r.php#L100
а где непосредственно вызывается аутентификация и вызов запроса базовой авторизации?
https://github.com/githubjeka/angular-y ... er.php#L12
тут токена
https://github.com/githubjeka/angular-y ... r.php#L100
а где непосредственно вызывается аутентификация и вызов запроса базовой авторизации?
Re: RESTful API - базовая авторзация парой логин/пароль
!$model->login()) - вызывается аутентификация. Если верно, то пользователь проходит аутентификацию и в клиент посылается Authorization: Basic, потом на клиенте он сохраняется и проверяется при каждом запросе .
И $model->validate(); избыточна в данном действии контроллера. Но на тот момент сделал так, сейчас уже переписал многое. Как нибудь обновлю на досуге.
И ещё HTTP Basic Auth: используйте, когда клиент и сервер находится на одном сервере. Если между сервером и клиентом "физический" разрыв, то лучше использовать токен или OAuth 2 без сессий User::enableSession(false)
И $model->validate(); избыточна в данном действии контроллера. Но на тот момент сделал так, сейчас уже переписал многое. Как нибудь обновлю на досуге.
И ещё HTTP Basic Auth: используйте, когда клиент и сервер находится на одном сервере. Если между сервером и клиентом "физический" разрыв, то лучше использовать токен или OAuth 2 без сессий User::enableSession(false)
Re: RESTful API - базовая авторзация парой логин/пароль
"и в клиент посылается Authorization: Basic" - боюсь не понял, по моему, просто авторизация через форму?yiijeka писал(а):!$model->login()) - вызывается аутентификация. Если верно, то пользователь проходит аутентификацию и в клиент посылается Authorization: Basic, потом на клиенте он сохраняется и проверяется при каждом запросе .
И $model->validate(); избыточна в данном действии контроллера. Но на тот момент сделал так, сейчас уже переписал многое. Как нибудь обновлю на досуге.
И ещё HTTP Basic Auth: используйте, когда клиент и сервер находится на одном сервере. Если между сервером и клиентом "физический" разрыв, то лучше использовать токен или OAuth 2 без сессий User::enableSession(false)