苗条的框架-API安全性

Jur*_*ker 1 php authentication api slim

所以我有一个RESTful API,但是我想保持安全,以便不是每个人都能做任何事情。

$app->get('/users' , function(Request $request, Response $response){
  $sql = "SELECT * FROM users";

  try{
    // Get db object
    $db = new db();
    // Connect
    $db = $db->connect();

    $stmt = $db->query($sql);
    $users = $stmt->fetchAll(PDO::FETCH_OBJ);
    $db = null;
    echo json_encode($users);
  } catch(PDOException $e){
    echo '{"error": {"text": '.$e->getMessage().'}}';
  }
});
Run Code Online (Sandbox Code Playgroud)

所以当我去的时候,http://localhost/API/users我让所有用户进入一个json表。

在我的数据库中,我的数据被存储起来,就像[{"id":"1","username":"werknemer","password":"...","level":"1","name":"piet","surname":"jan","email":"pietjan@gmail.nl"}] 我希望每个人都可以通过我的API来查看自己的表一样level 5

有解决方案吗?

小智 6

您的示例非常基础,这是在REST API中使用某些“身份验证”概念的起点。

首先,认证:=授权。

拆分这两个概念,第一个将使用户注册并登录到您的应用程序,第二个将使您在此示例中寻找“艰苦的工作”,因此请检查特定用户是否能够执行某些操作东西。

对于身份验证,您可以提供所需的所有方法,但请记住,在REST中,您的应用程序必须是无状态的,并且应提供一个令牌(通过HTTP标头传递),应用程序将使用该令牌来了解用户是否已登录和可以做一些事情。

这就是关键概念:应该使用令牌(请参见JWT或OAUTH)进行授权,而最基本的授权是:“用户记录”。

在您的示例中,您应该使用中间件来过滤http请求,并且如果用户未被授权(登录||没有minLevel:5),则不要进入路由器回调。

签出JWT或OAuth2以获得更多信息。

查看此->(https://github.com/damianopetrungaro/slim-boilerplate),以获取在瘦应用程序中生成JWT的基本示例(如果要使用此样板,请不要使用md5作为哈希密码)是一个非常基本的例子)