Ich baue eine RESTful API mit Laravel mit der RESTful Controller-Eigenschaft. Bisher konnte ich das meiste davon zum Laufen bringen. Das Problem ist jetzt Authentifizierung, ich versuche Amazon Ansatz mit einer "user_id" und "Signatur" zu verwenden. Erstelle die Signatur mit Hilfe von 'hash_hmac()' von PHP.REST API Authentisierung mit Laravel
dies ein Beispiel api Controller
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);
}
}
}
und dies der api Controller-Klasse
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);
}
}
eine GET-Anfrage zu machen http://api.xyz.com/v1/tasks/1?user_id=1&sig=41295da38eadfa56189b041a022c6ae0fdcbcd5e65c83f0e9aa0e6fbae666cd8
immer eine Erfolgsmeldung zurückgibt, auch wenn ich den Wert des User_id Parameter verändern, die sollte die Signatur ungültig machen und die Anfrage ungültig machen. Es scheint, dass meine verfiy_request
Methode nicht ausgeführt wird. Bitte helfen Sie mir
Sie schicken $ sig und $ userId in der Anfrage selbst. Glaubst du nicht, dass jemand diese Parameter schnüffeln und sich in deinem Namen authentifizieren kann? – voila
Große Frage! Und ja, Sie haben Recht, dass diese Elemente abgefangen werden können. Ich denke, dass Amazon eine Art Methode verwendet, um die URL nach einer gewissen Zeit aus diesem Grund ablaufen zu lassen. Ich habe nicht unbedingt versucht, die Authentifizierungswahl dieser Person zu untersuchen, sondern gezeigt, wie man Filter in Laravel verwendet. – jonahlyn