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参数的值时也会返回成功的消息,该参数应使签名无效请求无效.
我最近也在研究这个问题,并建议使用过滤器.它可以像这样工作:
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); } }); 另外,谢谢你介绍我哨兵:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |