首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超薄框架- API安全

超薄框架- API安全
EN

Stack Overflow用户
提问于 2017-06-19 05:12:31
回答 2查看 8.8K关注 0票数 1

所以我有一个RESTful应用程序接口,但我希望是安全的,这样不是每个人都能做任何事情。

代码语言:javascript
复制
$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的话。

有什么解决方案吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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作为散列密码,这是一个非常基本的示例)

票数 7
EN

Stack Overflow用户

发布于 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上使用它的好文章。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44619576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档