苗条的框架 - API 安全
Slim framework - API Security
所以我有一个RESTfulAPI,但我想安全一点,所以不是每个人都可以做任何事情。
$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 table。
在我的数据库中,我的数据存储方式类似于 [{"id":"1","username":"werknemer","password":"...","level":"1","name":"piet","surname":"jan","email":"pietjan@gmail.nl"}]
希望大家通过我的API看到自己的table如果你是level 5
.
有解决办法吗?
您需要为您的 API 添加身份验证和授权。
身份验证是了解谁在访问 API 的过程。做到这一点的一个好方法是 OAuth 2。我喜欢并使用 Brent Shaffer's OAuth 2.0 Server library. https://github.com/akrabat/slim-bookshelf-api/tree/master/api 包含一个 API 的实现,它使用 OAuth 2 来授权用户。
一旦您知道谁在登录,您就需要根据他们的角色(或级别)限制他们的访问。这称为访问控制。为此,我喜欢 zend 组件。试试 zend-permissions-rbac - there's a good article on how to use it on the ZF blog.
您的示例非常基础,它是在您的 REST API 中使用某些 "auth" 概念的起点。
首先要做的事情:身份验证!=授权。
拆分这两个概念,第一个是让用户注册并登录到你的应用程序,第二个是你在这个例子中寻找的"hard work",所以检查是否有特定的用户可以做一些事情。
对于身份验证,您可以提供所需的所有方法,但请记住,在 REST 中,您的应用必须是无状态的,并且您应该提供一个令牌(通过 HTTP Headers 传递),您的应用将使用该令牌了解用户是否登录并且可以做一些事情的应用程序。
这是关键概念:令牌(参见 JWT 或 OAUTH)应该用于授权,一个非常基本的授权是:"USER LOGGED".
在你的例子中,你应该使用 middlewares 来过滤 http 请求,如果用户未被授权(登录 || 没有 minLevel:5).
查看 JWT 或 OAuth2 以获得更多信息。
查看此内容 -> (https://github.com/damianopetrungaro/slim-boilerplate) 以获取在超薄应用程序中生成 JWT 的基本示例(如果您要使用此样板,请不要使用 md5 作为哈希密码,这是一个很好的例子基本示例)
所以我有一个RESTfulAPI,但我想安全一点,所以不是每个人都可以做任何事情。
$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 table。
在我的数据库中,我的数据存储方式类似于 [{"id":"1","username":"werknemer","password":"...","level":"1","name":"piet","surname":"jan","email":"pietjan@gmail.nl"}]
希望大家通过我的API看到自己的table如果你是level 5
.
有解决办法吗?
您需要为您的 API 添加身份验证和授权。
身份验证是了解谁在访问 API 的过程。做到这一点的一个好方法是 OAuth 2。我喜欢并使用 Brent Shaffer's OAuth 2.0 Server library. https://github.com/akrabat/slim-bookshelf-api/tree/master/api 包含一个 API 的实现,它使用 OAuth 2 来授权用户。
一旦您知道谁在登录,您就需要根据他们的角色(或级别)限制他们的访问。这称为访问控制。为此,我喜欢 zend 组件。试试 zend-permissions-rbac - there's a good article on how to use it on the ZF blog.
您的示例非常基础,它是在您的 REST API 中使用某些 "auth" 概念的起点。
首先要做的事情:身份验证!=授权。
拆分这两个概念,第一个是让用户注册并登录到你的应用程序,第二个是你在这个例子中寻找的"hard work",所以检查是否有特定的用户可以做一些事情。
对于身份验证,您可以提供所需的所有方法,但请记住,在 REST 中,您的应用必须是无状态的,并且您应该提供一个令牌(通过 HTTP Headers 传递),您的应用将使用该令牌了解用户是否登录并且可以做一些事情的应用程序。
这是关键概念:令牌(参见 JWT 或 OAUTH)应该用于授权,一个非常基本的授权是:"USER LOGGED".
在你的例子中,你应该使用 middlewares 来过滤 http 请求,如果用户未被授权(登录 || 没有 minLevel:5).
查看 JWT 或 OAuth2 以获得更多信息。
查看此内容 -> (https://github.com/damianopetrungaro/slim-boilerplate) 以获取在超薄应用程序中生成 JWT 的基本示例(如果您要使用此样板,请不要使用 md5 作为哈希密码,这是一个很好的例子基本示例)