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生成的,前面博客有介绍其安装流程)

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控制器,来测试(我先上代码,有几个注意事项我在代码中注释)

 CompositeAuth::className(),
            //这边选择你要开启的验证方式
            'authMethods' => [ 
                HttpBasicAuth::className(),
                HttpBearerAuth::className(), 
                QueryParamAuth::className(),   
            ],

        ];
        return $behaviors;
    }

    /**
     * GET 返回文章的内容
     * @return array
     */
    public function actionGetArticleInfo()
    {
        return ['title' => 'title', 'content' => 'content'];
    }
}

    ① 登陆API接口

      yii2-搭建RESTful Api:授权认证(二)_第1张图片

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

         /*这图是我故意没有在header添加验证信息,会报的错误*/yii2-搭建RESTful Api:授权认证(二)_第2张图片

/*这是成功的*/

yii2-搭建RESTful Api:授权认证(二)_第3张图片

你可能感兴趣的:(PHP,Yii)