首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >curl + jsecurity身份验证

curl + jsecurity身份验证
EN

Stack Overflow用户
提问于 2010-10-07 22:37:16
回答 1查看 1.7K关注 0票数 0

我有一个使用jsecurity插件进行身份验证的grails应用程序。

如何使用curl发送我的凭据?如果我只是执行curl -u用户名mysite

我收到输入密码的提示,然后什么都没有。

我尝试执行一个anyauth命令,这就是我在站点上得到的结果。知道为什么它会返回302吗?

代码语言:javascript
复制
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是正确的,它是基于表单的。当我去地址的时候

代码语言:javascript
复制
 http://localhost:8080/SkillsDB/auth/initialLogin

这是显示的表单代码:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-07 23:40:12

如果使用基于表单的身份验证方法,则可能需要向登录表单发出HTTP POST请求,如下所示:

代码语言:javascript
复制
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标头。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3882765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档