проверка подлинности curl + jsecurity - PullRequest
0 голосов
/ 07 октября 2010

У меня есть приложение grails, которое использует плагин jsecurity для аутентификации.

Как использовать curl для отправки учетных данных?Если я просто сделаю curl -u username 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

, вот дополнительная информация:

Роб прав, что он основан на форме.Когда я иду по адресу

 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>

1 Ответ

1 голос
/ 07 октября 2010

Если вы используете метод аутентификации на основе форм, скорее всего, вам нужно будет сделать 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, который возвращается в ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...