Аутентификация с открытым идентификатором на той же странице - PullRequest
2 голосов
/ 04 декабря 2009

У меня есть требование, когда страница входа открывает главную страницу во всплывающем окне,

Вот как я обработал это при обычной аутентификации:

<http>
...
<form-login login-page="/Login.html" authentication-failure-url="/LoginHandler.jsp" always-use-default-target="false" default-target-url="/LoginHandler.jsp"/>
...
</http>

Страница входа создает ajax-вызов (внутренне с помощью GWT's Request Builder) и читает html-страницу ответа. так что, если LoginHandler.jsp содержит «success», вход в систему будет успешным, или если LoginHandler.jsp содержит «fail», то вход в систему не удался.

В любом случае, Login.html знает об ошибке или неудаче аутентификации и открывает всплывающее окно, содержащее главный экран в случае успеха.

Теперь мне нужно, чтобы моя система поддерживала OpenID, если я хорошо понимаю, аутентификация с открытым идентификатором работает следующим образом, в случае успеха открывается URL-адрес успеха (в основном это LoginHandler.jsp в моем случае), однако , если это не удается .... Он открывает экран входа в систему Целевого сервера (например, экран входа в Google), как мне спроектировать мой код для работы в этом senario ??

это мой конфиг:

<openid-login authentication-failure-url="/LoginHandler.jsp" default-target-url="/LoginHandler.jsp" user-service-ref="openIdUserService"/>

вот как я вхожу, используя RequestBuilder:

// Encode values for sending as a post request.
String postData = "j_username=" + username 
        + "&j_password=" + password
        + ((isRemembered) ? "&_spring_security_remember_me=on" : "");
String serverUrl = URL.encode("j_spring_security_check");

/*
 * Authenticate the user using a request builder to send the request to the server.
 * <p>on successful authentication, open main screen in a pop up
 * */
try
{
    RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, URL.encode(serverUrl));
    requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
    requestBuilder.sendRequest(postData, new RequestCallback()
    {
    public void onError(Request request, Throwable exception)
    {
        //Do nothing
    }

    public void onResponseReceived(Request request, Response response)
    {
        String responseText = response.getText();
        int indexStart = responseText.indexOf(startMessageIndicator) + startMessageIndicator.length();
        int indexEnd = responseText.indexOf(endMessageIndicator);
        String text = responseText.substring(indexStart, indexEnd);

        //Login was a success
        if (text.contains(successMessageIndicator))
        {
        //Woophie !! code for success comes here.
        }
        else if (text.contains(errorMessageIndicator))
        {
        //Ooops ! get the error message encoded in the page
        }
    }
    });
}
catch (RequestException e)
{
    //Do nothing
}

Есть ли способ использовать такой же подход для аутентификации на основе открытого идентификатора?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2009

OpenID не работает, как вы описали. Пользователь вводит свой идентификатор OpenID на вашем сайте и всегда будет перенаправлен на сайт поставщика OpenID (OP) для проверки. После проверки пользователь будет перенаправлен обратно на ваш сайт. Они не могут ввести как свой идентификатор OpenID, так и пароль, ожидаемый ОП на вашем сайте, как они могут это сделать при традиционной аутентификации по имени пользователя / паролю. Надеюсь, это поможет!

1 голос
/ 07 декабря 2009

Я не уверен, точен ли приведенный выше ответ, потому что я захожу в SO с OpenID, и он никогда меня не перенаправляет. Я предполагаю, что это потому, что он хранит мой пароль OpenID в cookie-файле и перенаправляет меня, только если он не работает. Хотя я не знаю, как все это работает.

...