通过HTTP标头进行Symfony2身份验证

antanas_sepikas

我正在运行Symfony2应用程序,该应用程序已实现登录机制。

但是我需要以某种方式从其他应用程序发送请求,以检查该系统上是否存在请求的URL:

例如,有一个请求http:// myapp / order / 1111,我需要检查它是否返回200 OK标头或404 Not Found状态。

当我发送请求时,它是未经授权的,并被重定向到登录页面/ login,该页面返回200 OK状态标题。

我需要以某种方式安全地绕过登录机制。有没有一种方法可以添加登录凭据以进行请求,或创建其他登录方法?

编辑:

如评论中所建议,我尝试使用curl。但是我无法弄清楚它是如何工作的。这是我所拥有的,但是不起作用。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost/en/login');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_POST, true); 
$html = new DOMDocument();
$html->loadHTML(curl_exec($ch));

if (curl_error($ch)) {
    echo(curl_error($ch));
}
$csrf_token = $html->getElementById('csrf_token')->getAttribute('value');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/en/login'); 
//curl_setopt($ch, CURLOPT_REFERER, 'http://localhost/en/login');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
    '_username' => 'login_username', 
    '_password' => 'login_password', 
    '_remember_me' => 'on',
    '_csrf_token' => $csrf_token
)));

curl_setopt($ch, CURLOPT_POST, true); 
$result = curl_exec($ch); 

if (curl_error($ch)) {
    echo(curl_error($ch));
}

echo $result;  

curl_close($ch);

有什么建议,如何在这种情况下使用curl?

antanas_sepikas

如果有人为此苦苦挣扎,我为这个问题写了一个解决方案:

$ch = curl_init();

//get login form
curl_setopt($ch, CURLOPT_URL, $login_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_path); 

//parse html to get csrf_token, I added id attribute to it for easier retrieving
$html = new DOMDocument();
$html->loadHTML(curl_exec($ch));
$csrf_token = $html->getElementById('csrf_token')->getAttribute('value');

if (curl_error($ch)) {
    throw new Exception(curl_error($ch));
}

//send post request to login_check with parameters (csrf_token included)
curl_setopt($ch, CURLOPT_URL, $check_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
    '_username' => $username, 
    '_password' => $password, 
    '_remember_me' => 'on', //if you use remember me functionality
    '_csrf_token' => $csrf_token
)));

curl_exec($ch);
if (curl_error($ch)) {
    throw new Exception(curl_error($ch));
}

//request login protected urls
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, false);

curl_exec($ch); 

if (curl_error($ch)) {
    throw new Exception(curl_error($ch));
}

$info = curl_getinfo($ch);
curl_close($ch);

//I used this code in a function returning url and http_code for further processing
return array(
    'url' => $info['url'],
    'http_code' => $info['http_code']
);

我在本地化方面遇到了问题。我用来传递login_check URL与区域设置这样的http://本地主机/ EN / login_check,通过消除找到我解决了这一问题:HTTP://本地主机/ login_check

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过HTTP标头进行Symfony2身份验证

来自分类Dev

nginx代理请求以身份验证http请求中的标头值进行服务

来自分类Dev

通过HTTP进行ArangoDB身份验证

来自分类Dev

OAuth2 INTRIDEA gem和HTTP基本身份验证标头

来自分类Dev

验证用户是否在symfony2中通过了身份验证

来自分类Dev

基本身份验证的HTTP身份验证标头字符限制?

来自分类Dev

使用Symfony2中的OAuth2 client_credentials进行身份验证

来自分类Dev

使用Symfony2 API对AngularJs应用程序进行身份验证

来自分类Dev

在Symfony2应用程序中对用户进行身份验证

来自分类Dev

Symfony2:使用LDAP(活动目录)和DB进行用户身份验证

来自分类Dev

Symfony2定制用户提供程序未进行身份验证/登录

来自分类Dev

使用Symfony2 API对AngularJs应用程序进行身份验证

来自分类Dev

Symfony2已登录但未在探查器中通过身份验证

来自分类Dev

Symfony2身份验证通过自定义UserProvider静默失败

来自分类Dev

Docker不会通过HTTP发送身份验证头

来自分类Dev

PHP Soap身份验证标头

来自分类Dev

Angular - 身份验证标头

来自分类Dev

Symfony2:根据路径检查用户身份验证

来自分类Dev

Symfony2,普通+休息身份验证

来自分类Dev

覆盖身份验证失败处理程序-Symfony2

来自分类Dev

使用Symfony2和FOSUserBundle的iOS身份验证

来自分类Dev

Symfony2:在检查路由之前检查身份验证

来自分类Dev

在Symfony 3中通过LDAP进行身份验证

来自分类Dev

通过HAProxy进行Openshift HTTP身份验证

来自分类Dev

通过 HTTP 端点进行用户身份验证

来自分类Dev

通过 HTTP 协议进行身份验证的 Git 克隆

来自分类Dev

身份验证标头与授权标头?

来自分类Dev

使用诸如WebAPI之类的Auth标头进行身份验证,但在MVC中

来自分类Dev

如何为我的方案强制进行Soap标头身份验证?

Related 相关文章

  1. 1

    通过HTTP标头进行Symfony2身份验证

  2. 2

    nginx代理请求以身份验证http请求中的标头值进行服务

  3. 3

    通过HTTP进行ArangoDB身份验证

  4. 4

    OAuth2 INTRIDEA gem和HTTP基本身份验证标头

  5. 5

    验证用户是否在symfony2中通过了身份验证

  6. 6

    基本身份验证的HTTP身份验证标头字符限制?

  7. 7

    使用Symfony2中的OAuth2 client_credentials进行身份验证

  8. 8

    使用Symfony2 API对AngularJs应用程序进行身份验证

  9. 9

    在Symfony2应用程序中对用户进行身份验证

  10. 10

    Symfony2:使用LDAP(活动目录)和DB进行用户身份验证

  11. 11

    Symfony2定制用户提供程序未进行身份验证/登录

  12. 12

    使用Symfony2 API对AngularJs应用程序进行身份验证

  13. 13

    Symfony2已登录但未在探查器中通过身份验证

  14. 14

    Symfony2身份验证通过自定义UserProvider静默失败

  15. 15

    Docker不会通过HTTP发送身份验证头

  16. 16

    PHP Soap身份验证标头

  17. 17

    Angular - 身份验证标头

  18. 18

    Symfony2:根据路径检查用户身份验证

  19. 19

    Symfony2,普通+休息身份验证

  20. 20

    覆盖身份验证失败处理程序-Symfony2

  21. 21

    使用Symfony2和FOSUserBundle的iOS身份验证

  22. 22

    Symfony2:在检查路由之前检查身份验证

  23. 23

    在Symfony 3中通过LDAP进行身份验证

  24. 24

    通过HAProxy进行Openshift HTTP身份验证

  25. 25

    通过 HTTP 端点进行用户身份验证

  26. 26

    通过 HTTP 协议进行身份验证的 Git 克隆

  27. 27

    身份验证标头与授权标头?

  28. 28

    使用诸如WebAPI之类的Auth标头进行身份验证,但在MVC中

  29. 29

    如何为我的方案强制进行Soap标头身份验证?

热门标签

归档