php restful 认证,yii2-搭建RESTful Api:授权认证(二)

在配置中如有问题:加Q405420415,有问必答。

一.  yii2.0几种授权的介绍

RESTful APIs 通常是无状态的, 也就意味着不应使用 sessions 或 cookies, 因此每个请求应附带某种授权凭证,因为用户授权状态可能没通过 sessions 或 cookies 维护, 常用的做法是每个请求都发送一个秘密的 access token 来认证用户, 由于 access token 可以唯一识别和认证用户, API 请求应通过 HTTPS 来防止 man-in-the-middle(MitM)中间人攻击。

/*以上摘自YII中国官方文档*/

下面有几种方式(稍微自己整理下,感觉看起来更容易理解点):

HttpBasicAuth:在请求的头添加Authorization(即:Authorization: "Basic 用户名和密码的base64加密字符串" )

HttpBearerAuth:在请求的头添加Authorization(即:Authorization: "Bearer access-token" )

QueryParamAuth:在URL结尾添加GET参数access-token(即: https://demo.com/users?access-token=xxxxxxxx)

二.  详细的配置

①  重写common/user/models的findIdentityByAccessToken方法

/**

* {@inheritdoc}

*/

public static function findIdentityByAccessToken($token, $type = null)

{

return static::findOne(['access_token' => $token]);

}

②  添加控制层登录的相关代码(能够保存到数据库中,如果LoginForm没有请重新用命里安装下,这些文件都是安装完后自带的,然后复制到api/models这个目录来,其中user表是利用yii-admin 扩展组件里面migrate生成的,前面博客有介绍其安装流程)

namespace api\controllers;

use api\models\LoginForm;

use yii\rest\ActiveController;

use Yii;

/**

* User controller

*/

class UserController extends ActiveController

{

public $modelClass = 'common\models\User';

/**

* 登陆

* @return array

* @throws \yii\base\Exception

* @throws \yii\base\InvalidConfigException

*/

public function actionLogin()

{

$model = new LoginForm();

if ($model->load(Yii::$app->getRequest()->getBodyParams(), '') && $model->login()) {

return [

'access_token' => $model->login(),

];

} else {

return $model->getFirstErrors();

}

}

}

③  重写api/models/LoginForm.php的login方法

/**

* Logs in a user using the provided username and password.

*

* @return bool whether the user is logged in successfully

*/

public function login()

{

if ($this->validate()) {

$access_token = $this->_user->generateAccessToken();

$this->_user->save();

return $access_token;

} else {

return false;

}

}

三.  postman测试API接口,我这边多创建了Article控制器,来测试(我先上代码,有几个注意事项我在代码中注释)

namespace api\controllers;

use yii\rest\ActiveController;

use yii\filters\auth\CompositeAuth;

use yii\filters\auth\HttpBasicAuth;

use yii\filters\auth\HttpBearerAuth;

use yii\filters\auth\QueryParamAuth;

use Yii;

class ArticleController extends ActiveController

{

public $modelClass = '';

public function behaviors()

{

$behaviors = parent::behaviors();

$behaviors['authenticator'] = [

'class' => CompositeAuth::className(),

//这边选择你要开启的验证方式

'authMethods' => [

HttpBasicAuth::className(),

HttpBearerAuth::className(),

QueryParamAuth::className(),

],

];

return $behaviors;

}

/**

* GET 返回文章的内容

* @return array

*/

public function actionGetArticleInfo()

{

return ['title' => 'title', 'content' => 'content'];

}

}

① 登陆API接口

②获取文章信息(我这边用HttpBearerAuth,其余大家自己摸索下,都差不多,选择自己想要的。还有个注意点记得在配置文件那边把Artilce这个控制器加进去,不然会报404找不到,这个在上个RESTful教程一有讲解到)

/*这图是我故意没有在header添加验证信息,会报的错误*/

/*这是成功的*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值