Symfony REST API身份验证无sfGuardPlugin
我试图找到有关在Symfony项目中保护HTTP REST API的信息,但是我可以找到的所有信息都是关于使用sfGuardPlugin的信息。从我所看到的情况来看,这个插件对于web服务并不是很有用。它试图让用户配置文件模型(并不总是那么简单)和“登录”和“注销”页面,这对于无状态的REST API显然没有意义。它比我所需要的要多得多,而且我还能保持简单。Symfony REST API身份验证无sfGuardPlugin
我想知道在哪里实现我自己的授权方法(松散地基于Amazon S3的方法)。我知道我希望授权方法的实际工作,我只是不知道我可以将代码放在我的Symfony应用程序中,以便它在每个请求处理之前运行,并且允许已批准的请求继续,但不成功的请求会返回403.
有没有想法?我无法想象这很难,我只是不知道从哪里开始寻找。
有REST风格的认证插件 - >http://www.symfony-project.org/plugins/sfRestfulAuthenticationPlugin
虽然没有使用它....
如何,你打算来验证用户身份?
Jobeet的教程使用令牌... http://www.symfony-project.org/jobeet/1_4/Doctrine/en/15
将项目配置“require”和配置实例创建之间的HTTP basicAuth脚本粘贴在您的<appname> _dev.php(Symfony 1.4 = <)中。
在你的开发测试它。如果有效,请将代码放入index.php文件(相当于<应用程序名称> _dev.php)并推送它。
快速和肮脏,但它的作品。尽管你可能想要保护脚本中的用户名/密码。
例如
$realm = 'Restricted area';
//user => password
$users = array('username' => 'password');
if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
die('Text to send if user hits Cancel button');
}
// || !isset($users[$data['username']]
// analyze the PHP_AUTH_DIGEST variable
if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) || !isset($users[$data['username']])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
die('Wrong Credentials!');
}
// generate the valid response
$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);
if ($data['response'] != $valid_response) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
die('Wrong Credentials!');
}
// function to parse the http auth header
function http_digest_parse($txt)
{
// protect against missing data
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
$data = array();
$keys = implode('|', array_keys($needed_parts));
preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
unset($needed_parts[$m[1]]);
}
return $needed_parts ? false : $data;
}
// ****************************************************************************
// ok, valid username & password.. continue...
您要如何进行身份验证?你打算发送一个密钥与每个请求? – Gerry