所以我有一个RESTful应用程序接口,但我希望是安全的,这样不是每个人都能做任何事情。
$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().'}}';
}
});因此,当我转到http://localhost/API/users时,我将所有用户都放入一个json表中。
在我的数据库中,我的数据像[{"id":"1","username":"werknemer","password":"...","level":"1","name":"piet","surname":"jan","email":"pietjan@gmail.nl"}]一样存储,我希望每个人都能通过我的API看到自己的表,如果你是level 5的话。
有什么解决方案吗?
发布于 2017-06-19 16:36:40
您的示例非常简单,它是在REST中使用某些"auth“概念的起点。
首先要做的是:身份验证!=授权。
将这两个概念分开,第一个是让用户注册并登录到你的应用程序中,第二个是你在这个例子中寻找的“艰苦的工作”,所以检查一下特定的用户是否能够做一些事情。
对于身份验证,您可以提供您想要的所有方法,但请记住,在REST中,您的应用程序必须是无状态的,并且您应该提供一个令牌(通过HTTP头传递),应用程序将使用该令牌来了解用户是否已登录并可以执行某些操作。
这就是关键概念:应该使用令牌(参见JWT或OAUTH)进行授权,一个非常基本的授权是:“已记录用户”。
在您的示例中,您应该使用middlewares来过滤http请求,如果用户未经授权(已登录||没有minLevel:5),则不要进入路由器回调。
查看JWT或OAuth2获取更多信息。
查看这个-> (https://github.com/damianopetrungaro/slim-boilerplate),以获得在瘦应用程序中生成JWT的基本示例(如果您要使用此样板,请不要使用md5作为散列密码,这是一个非常基本的示例)
发布于 2017-06-19 14:35:59
您需要向API添加身份验证,然后再添加授权。
身份验证是知道谁在访问API的过程。一个很好的方法就是给你OAuth 2.我喜欢并使用Brent Shaffer's OAuth 2.0 Server库。https://github.com/akrabat/slim-bookshelf-api/tree/master/api包含一个使用OAuth 2授权用户的应用编程接口的实现。
一旦知道谁在登录,就需要根据他们的角色(或级别)限制他们的访问权限。这称为访问控制。我喜欢这方面的zend组件。试试zend-permissions-rbac吧--有一篇关于如何在ZF blog上使用它的好文章。
https://stackoverflow.com/questions/44619576
复制相似问题