加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 使用laravel进行REST api身份验证

发布时间:2020-12-14 19:48:58 所属栏目:大数据 来源:网络整理
导读:我正在使用RESTful控制器属性构建一个带有laravel的RESTful api.到目前为止,我已经能够使大部分工作.现在的问题是验证,我试图使用“user_id”和“签名”的亚马逊方法. 我使用php的’hash_hmac()’创建签名. 这是一个api控制器的例子 class Api_Tasks_Control
我正在使用RESTful控制器属性构建一个带有laravel的RESTful api.到目前为止,我已经能够使大部分工作.现在的问题是验证,我试图使用“user_id”和“签名”的亚马逊方法.
我使用php的’hash_hmac()’创建签名.

这是一个api控制器的例子

class Api_Tasks_Controller extends Api_Controller {

    public $restful = true;

    public function get_index($id = null) {

        $this->verfiy_request();

        if(!is_null($id))
        {
            return Response::json(array("tasks"=>"just one"),200);
        }
        else
        {
            return Response::json(array("tasks"=>"everthing"),200);
        }
    }


}

这是api控制器类

class Api_Controller extends Controller {

    public function verify_request() {

        //user id
        $user_id = (int) Input::get('user_id');
        //signature
        $sig = Input::get('sig');

        //Lookup user
        $user = Sentry::user($user_id);
        if($user) {
            //user email
            $email = $user->email;
            //user api key
            $api_key = $user->metadata['api_key'];
            //recreate signature
            $_sig = hash_hmac("sha256",$email.$user_id,$api_key);
            if($_sig === $sig) {
                return Response::json(array("message"=>"Request Ok"),200);
            }
            else {
                return Response::json(array("message"=>"Request Bad"),400);
            }
        }
        else {

            return Response::json(array("message"=>"Request not authorized"),401);
        }
    }

发出获取请求http://api.xyz.com/v1/tasks/1?user_id=1u0026amp;sig=41295da38eadfa56189b041a022c6ae0fdcbcd5e65c83f0e9aa0e6fbae666cd8即使在我更改了user_id参数的值时也会返回成功的消息,该参数应使签名无效请求无效.
似乎我的verfiy_request方法没有执行.
请帮帮我

我最近也在研究这个问题,并建议使用过滤器.它可以像这样工作:
class Api_Tasks_Controller extends Base_Controller {

    public $restful = true;

    function __construct() {
        // Check if user is authorized
        $this->filter('before','api_checkauth');
    }

    // rest of the class ....

}

在您的routes.php文件中:

Route::filter('api_checkauth',function()
{
  //user id
  $user_id = (int) Input::get('user_id');

  //signature
  $sig = Input::get('sig');

  try {
    //Lookup user
    $user = Sentry::user($user_id);

    if($user) {
      //user email
      $email = $user->email;
      //user api key
      $api_key = $user->metadata['api_key'];
      //recreate signature
      $_sig = hash_hmac("sha256",$api_key);
      if($_sig === $sig) {
          return Response::json(array("message"=>"Request Ok"),200);
      }
      else {
          return Response::json(array("message"=>"Request Bad"),400);
      }
    }
    else {
      return Response::json(array("message"=>"Request not authorized"),401);
    }
  }
  catch (SentrySentryException $e) {
    $errors = $e->getMessage(); // catch errors such as user not existing or bad fields
    return Response::json(array("message"=>$errors),404);
  }

});

另外,谢谢你介绍我哨兵:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读