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

前端之家收集整理的这篇文章主要介绍了php – 使用laravel进行REST api身份验证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用RESTful控制器属性构建一个带有laravel的RESTful api.到目前为止,我已经能够使大部分工作.现在的问题是验证,我试图使用“user_id”和“签名”的亚马逊方法.
我使用PHP的’hash_hmac()’创建签名.

这是一个api控制器的例子

  1. class Api_Tasks_Controller extends Api_Controller {
  2.  
  3. public $restful = true;
  4.  
  5. public function get_index($id = null) {
  6.  
  7. $this->verfiy_request();
  8.  
  9. if(!is_null($id))
  10. {
  11. return Response::json(array("tasks"=>"just one"),200);
  12. }
  13. else
  14. {
  15. return Response::json(array("tasks"=>"everthing"),200);
  16. }
  17. }
  18.  
  19.  
  20. }

这是api控制器类

  1. class Api_Controller extends Controller {
  2.  
  3. public function verify_request() {
  4.  
  5. //user id
  6. $user_id = (int) Input::get('user_id');
  7. //signature
  8. $sig = Input::get('sig');
  9.  
  10. //Lookup user
  11. $user = Sentry::user($user_id);
  12. if($user) {
  13. //user email
  14. $email = $user->email;
  15. //user api key
  16. $api_key = $user->Metadata['api_key'];
  17. //recreate signature
  18. $_sig = hash_hmac("sha256",$email.$user_id,$api_key);
  19. if($_sig === $sig) {
  20. return Response::json(array("message"=>"Request Ok"),200);
  21. }
  22. else {
  23. return Response::json(array("message"=>"Request Bad"),400);
  24. }
  25. }
  26. else {
  27.  
  28. return Response::json(array("message"=>"Request not authorized"),401);
  29. }
  30. }

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

我最近也在研究这个问题,并建议使用过滤器.它可以像这样工作:
  1. class Api_Tasks_Controller extends Base_Controller {
  2.  
  3. public $restful = true;
  4.  
  5. function __construct() {
  6. // Check if user is authorized
  7. $this->filter('before','api_checkauth');
  8. }
  9.  
  10. // rest of the class ....
  11.  
  12. }

在您的routes.PHP文件中:

  1. Route::filter('api_checkauth',function()
  2. {
  3. //user id
  4. $user_id = (int) Input::get('user_id');
  5.  
  6. //signature
  7. $sig = Input::get('sig');
  8.  
  9. try {
  10. //Lookup user
  11. $user = Sentry::user($user_id);
  12.  
  13. if($user) {
  14. //user email
  15. $email = $user->email;
  16. //user api key
  17. $api_key = $user->Metadata['api_key'];
  18. //recreate signature
  19. $_sig = hash_hmac("sha256",$api_key);
  20. if($_sig === $sig) {
  21. return Response::json(array("message"=>"Request Ok"),200);
  22. }
  23. else {
  24. return Response::json(array("message"=>"Request Bad"),400);
  25. }
  26. }
  27. else {
  28. return Response::json(array("message"=>"Request not authorized"),401);
  29. }
  30. }
  31. catch (Sentry\SentryException $e) {
  32. $errors = $e->getMessage(); // catch errors such as user not existing or bad fields
  33. return Response::json(array("message"=>$errors),404);
  34. }
  35.  
  36. });

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

猜你在找的Laravel相关文章