如何使用cURL登录弹簧安全登录表单?

2022-09-01 23:11:18

我正在研究一个springMVC项目,其中用户身份验证基于spring安全性。

这个想法是拥有一个移动(android)应用程序,以便能够将某种数据发送到后端。

因此,在深入研究Android开发之前,我决定使用cURL模拟登录表单的情况。

我们网站的登录表格如下:

http://localhost:8080/app/user/login

我使用以下命令:

curl -F 'username=admin&password=admin' http://localhost:8080/app/user/login

但是,我将获得登录页面,换句话说,我无法根据模拟情况通过用户身份验证。

只是要注意:对于每个请求,spring安全将创建一个类似于以下内容的随机化令牌:

8863F732ADDE24CD167F4EF502A4333D

我应该如何使用模拟情况传递基于弹簧安全性的登录表单(要么要么cURLHTTPClient)


答案 1

像这样使用:cURL

 curl -d j_username=admin -d j_password=admin -L http://localhost:8080/app/j_spring_security_check

企业社会责任论坛

如果您得到类似的东西,则意味着启用了CSRF令牌保护。要使用cURL对其进行测试,您需要一个cookie和CSRF令牌本身。Expected CSRF token not found. Has your session expired?

以下命令会将所有 cookie 写入名为 的文件,并打印出 CSRF 令牌。Spring Security默认令牌参数名称是,如果您已更改它,那么您也需要更改。cookie_csrfgrep csrf

curl --cookie-jar cookie -L http://localhost:8080/app/j_spring_security_check  | grep csrf

然后,您可以执行下一个命令,该命令将从文件传递所有cookie。不要忘记替换为由上一个命令打印出来的实际值(如果已更改,则为参数名称)。|your_token_value|_csrf

curl --cookie cookie -d "j_username=admin&j_password=admin&_csrf=|your_token_value|" -L http://localhost:8080/app/j_spring_security_check

从 Spring Security 3.x 到 4.x

请注意,在Spring Security 4.x中,从更改为 POST的默认值,更改为的默认值更改为 to 的默认值更改为 从 更改为 的默认值更改为 。如果应用程序显式提供这些属性,则迁移不需要执行任何操作。login-processing-url/j_spring_security_check/loginusername-parameterj_usernameusernamepassword-parameterj_passwordpassword


答案 2

您应该将 spring 配置为支持基本身份验证。然后向请求中添加以下标头:

  • 名字:Authorization
  • 价值:base64(username:password)

这意味着用户名和密码应与分隔符一起串联为一个字符串,然后使用转换进行转换。:BASE64


推荐