2017-01-14 5 views
0

Я уже вызвал маркер из моего апи логина, используя этот код:Как обрабатывать Тонкий API JWT Authentication

if ($isCorrect == 1) { 
     $key = "example_key"; 
     $token = array(
      "iss" => "http://mywebsite.com", 
      "iat" => 1356999524, 
      "nbf" => 1357000000, 
      'data' => [     
       'userName' => $UserName, 
      ] 
     ); 

     $jwt = JWT::encode($token, $key); 
     $decoded = JWT::decode($jwt, $key, array('HS256')); 

     $unencodedArray = ['jwt' => $jwt]; 
     echo json_encode($unencodedArray); 
    } 

Так что я фишка сейчас, как я могу использовать маркер другой API? То, что я имею в виду, я не кто-нибудь хочет, чтобы выполнить эту апи без регистрации

Это мой метод выборки API:.

$app->get('/api/user/{UserId}', function($request){ 
//Select query here 
}); 

Это библиотека я использовал: https://github.com/firebase/php-jwt

Спасибо очень много для вашей помощи.

+0

«Я не хочу, чтобы кто-нибудь выполнял эту апи, не входив в систему ». Я не понимаю, что вы имеете в виду. Получение JWT проходит процесс входа в систему. Вы пытаетесь использовать несколько уровней аутентификации? Или спрашивать о том, как проверить пользователя, кто они такие, и, следовательно, можно безопасно получить JWT, который идентифицирует их (этот вопрос будет * очень * широко)? – HPierce

+0

Что я имею в виду, так это то, что мой API может получить доступ кем угодно, поэтому, если у меня есть метод удаления, любой может выполнить это без входа в систему/создания JWT. – Joseph

+2

Вы можете использовать промежуточное программное обеспечение для проверки подлинности JWT: https://github.com/tuupola/slim-jwt-auth –

ответ

0

Вам просто нужно добавить метод промежуточного слоя для API , который будет проверять проверки маркера JWT с этим именем пользователя Затем передать запрос API

`

$app->add(function ($Req ,$Res ,$next){ 
     //get token,username from the user 
    $token= $Req->getParsedBodyParam('token'); 
    $user_name=$Req->getParsedBodyParam('username'); 
    //check for empty of any of them 
    if(empty ($token)|| empty($user_name) ){ 
    $message=array("success"=>false,'message'=>'Some data is empty'); 
    return $Res->withStatus(401) 
       -> withJson($message); 
    } 
    else{ 

    //Validation test for the taken for this user name 
       $decoded_token = $this->JWT::decode($token, 'YourSecret key', array('HS256')); 
       if(isset($decoded_token->data->userName) && $decoded_token->data->userName == $user_Name){ 
       $message=array('message'=>'the token is valid'); 
//pass through the next API 
       $Res=$next($Req,$Res->withJson($message)); 
       return $Res; 
       } 
       else{ 
    $message=array("sccess"=>false,"message"=>"Token Validation Error",'code'=>201); 
    return $Res->withStatus(401) 
      ->withJson($message); 
       } 
    } 
    }); 
    `