我有一个使用jsecurity插件进行身份验证的grails应用程序。
如何使用curl发送我的凭据?如果我只是执行curl -u用户名mysite
我收到输入密码的提示,然后什么都没有。
我尝试执行一个anyauth命令,这就是我在站点上得到的结果。知道为什么它会返回302吗?
dcole@DCOLE-L /cygdrive/c/dev
$ curl --anyauth --verbose http://localhost:8080/SkillsDB
* About to connect() to localhost port 8080 (#0)
* Trying ::1... connected
* Connected to localhost (::1) port 8080 (#0)
> GET /SkillsDB HTTP/1.1
> User-Agent: curl/7.20.1 (i686-pc-cygwin) libcurl/7.20.1 OpenSSL/0.9.8o zlib/1.
2.5 libidn/1.18 libssh2/1.2.5
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 302 Moved Temporarily
< Server: Apache-Coyote/1.1
< Location: http://localhost:8080/SkillsDB/
< Transfer-Encoding: chunked
< Date: Thu, 07 Oct 2010 14:32:32 GMT
<
* Connection #0 to host localhost left intact
* Closing connection #0以下是其他信息:
Rob是正确的,它是基于表单的。当我去地址的时候
http://localhost:8080/SkillsDB/auth/initialLogin这是显示的表单代码:
<form action="/SkillsDB/auth/initialSignIn" method="post" name="logform" id="logform">
<input name="targetUri" value="" type="hidden">
<input value="" widgetid="username" tabindex="0" id="username" class="dijit dijitReset dijitLeft dijitTextBox" dojoattachpoint="textbox,focusNode" name="username" dojoattachevent="onmouseenter:_onMouse,onmouseleave:_onMouse,onfocus:_onMouse,onblur:_onMouse,onkeypress:_onKeyPress" autocomplete="off" type="text"></td>
<input value="" widgetid="password" tabindex="0" id="password" class="dijit dijitReset dijitLeft dijitTextBox" dojoattachpoint="textbox,focusNode" name="password" dojoattachevent="onmouseenter:_onMouse,onmouseleave:_onMouse,onfocus:_onMouse,onblur:_onMouse,onkeypress:_onKeyPress" autocomplete="off" type="password"></td>
<td style=""><span widgetid="dijit_form_Button_0" class="dijit dijitReset dijitLeft dijitInline dijitButton" dojoattachevent="ondijitclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse"><span class="dijitReset dijitRight dijitInline"><span class="dijitReset dijitInline dijitButtonNode"><button style="-moz-user-select: none;" tabindex="0" value="Log In" id="dijit_form_Button_0" aria-labelledby="dijit_form_Button_0_label" role="button" class="dijitReset dijitStretch dijitButtonContents" dojoattachpoint="titleNode,focusNode" name="" type="submit" wairole="button" waistate="labelledby-dijit_form_Button_0_label"><span class="dijitReset dijitInline" dojoattachpoint="iconNode"><span class="dijitReset dijitToggleButtonIconChar">✓</span></span><span class="dijitReset dijitInline dijitButtonText" id="dijit_form_Button_0_label" dojoattachpoint="containerNode">Log In</span></button></span></span></span></td>
</form>发布于 2010-10-07 23:40:12
如果使用基于表单的身份验证方法,则可能需要向登录表单发出HTTP POST请求,如下所示:
curl --data="username=foo&password=bar" http://localhost:8080/SkillsDB/login/auth
# note that '--data' causes the request to be a POST我不记得JSecurity的登录操作是什么,但您必须用它替换login/auth (在上面的curl命令中)。看一下登录页面提交到的<form>的操作。
请注意,您将在此处以纯文本形式传递密码。您可能希望对此事务使用HTTPS,但这是一个完全不同的问题。
除非JSecurity将其身份验证扩展为使用HTTP Basic Authentication,否则使用--anyauth是不太可能的,因为我可以想象curl将使用它来确定适当的HTTP身份验证方法。
关于您关于302的问题,当您将--location添加到curl参数中时会发生什么?这应该使curl跟随响应中返回的Location标头。
https://stackoverflow.com/questions/3882765
复制相似问题