Yii2 RESTful API 授权验证实战解析

0 下载量 77 浏览量 更新于2024-09-01 收藏 106KB PDF 举报
"yii2 restful 授权验证详解" 在Yii2框架中,RESTful API的授权验证是一个重要的安全环节,确保只有经过验证的用户才能访问敏感数据或执行特定操作。本文将详细介绍如何在Yii2中实现RESTful API的授权验证过程。 首先,我们需要了解RESTful风格的API。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,以资源为中心,通过统一的URI(Uniform Resource Identifier)进行访问。在RESTful API中,通常使用HTTP方法如GET、POST、PUT、DELETE等来表示对资源的操作。 接下来,我们将按照文章描述的步骤来讲解授权验证流程: 1. 用户在客户端(如移动应用或网页)填写登录表单。 2. 用户提交表单后,客户端向登录接口(如/login)发送请求,携带用户名和密码。 3. 服务器接收到请求后,验证用户名和密码的正确性。如果验证成功,服务器生成一个唯一的、安全的令牌(Token),并返回给客户端。 4. 客户端接收到Token后,将其存储在本地(例如,使用Cookie、LocalStorage或SessionStorage)。 5. 当需要访问受保护的接口(如获取用户个人信息接口)时,客户端在请求头中附带这个Token。 6. 服务器接收到请求后,会检查Token的有效性。如果Token有效,服务器将返回所需信息;若无效,服务器会拒绝请求,并可能提示用户重新登录。 为了实现这个流程,我们需要做一些准备工作: 1. 配置一个支持RESTful API的Yii2应用。 2. 使用Postman这样的工具模拟客户端请求,以便测试API接口。 3. 用户表需要包含一个`api_token`字段,用于存储生成的Token。 4. 在Yii2的配置中开启URL美化,配置POST类型的`login`操作和GET类型的`signup-test`操作。 5. 关闭`user`组件的Session功能,因为Token验证不依赖于Session。 在Yii2中,我们可以使用内置的`yii\filters\auth\HttpBearerAuth`类来处理Token验证。这个类会检查请求头中的`Authorization`字段,期望找到形如`Bearer <token>`的值。在控制器中,可以这样设置: ```php public function behaviors() { return [ 'authenticator' => [ 'class' => HttpBearerAuth::className(), 'except' => ['login'], // 免认证的action ], ]; } ``` 此外,我们还需要定义一个身份验证模型(Identity Class),它继承自`yii\web\User`或`yii\base\BaseObject`,并实现`findIdentityByAccessToken()`方法,用于根据Token查找用户。 ```php namespace common\models; use Yii; use yii\base\NotSupportedException; use yii\behaviors\TimestampBehavior; use yii\db\ActiveRecord; use yii\web\IdentityInterface; class User extends ActiveRecord implements IdentityInterface { // ...其他代码... public static function findIdentityByAccessToken($token, $type = null) { return static::findOne(['api_token' => $token]); } // ...其他代码... } ``` 在登录接口中,成功验证后,我们可以创建并返回Token: ```php public function actionLogin() { $model = new LoginForm(); if ($model->load(Yii::$app->request->post()) && $model->validate()) { $user = $model->getUser(); $user->api_token = Yii::$app->security->generateRandomString(); $user->save(false); return ['token' => $user->api_token]; } return $model; } ``` 最后,当客户端收到Token后,可以在后续的请求中添加`Authorization`头: ``` Authorization: Bearer <token> ``` 通过以上步骤,我们就实现了Yii2中RESTful API的授权验证。这个机制确保了API的安全性,防止未授权的访问,同时提供了灵活的身份验证方式。