2013-09-03 1 views
0

Я внедрил механизм аутентификации OAuth2 в своем приложении GWT. Сервер OAuth2 основан на Spring framework 3.x (используя его реализацию OAuth2 Spring Security).В GWT: как пометить страницу и быть в состоянии перенаправляться на нее после аутентификации?

Я использую OAuth2 «Код кода авторизации», чтобы получить аутентификацию пользователя (хотя неявный поток, возможно, был лучшим выбором в нашем случае). Поэтому сначала пользователь перенаправляется на страницу аутентификации сервера OAuth2, он вводит свои учетные данные и, если он успешно завершен, он перенаправляется обратно на url с кодом oauth. Затем он сделает второй звонок, чтобы получить токен доступа с сервера OAuth2.

Теперь вопрос, мы хотели бы, чтобы пользователь , чтобы иметь возможность добавить страницу в закладки в приложении и непосредственно к нему доступ. Если он уже прошел аутентификацию, то у него будет прямой доступ к нему (больше не требуется авторизация). В противном случае ему придется перейти в поток аутентификации OAuth2, но в конце концов его следует перенаправить на страницу с закладками, к которой он хотел получить доступ в начале.

Как я могу хранить эту страницу url и перенаправляться к ней после успешной аутентификации пользователя?

любая помощь будет оценена. Благодаря!

EDITED

Начальная Перенаправление URL осуществляется с помощью в JavaScript document.location.href

ответ

1

Способ поддержания оригинальный URI в OAuth 2.0 Authorization Грант поток должен передать его в параметре state так, что Перенаправление конечная точка может использовать его, после того, как обменять код авторизации для токен доступа,, чтобы перенаправить пользователя обратно на этот URI.

FYI, это именно то, что предлагает Google в примерах в их документации OAuth 2.0, например. https://developers.google.com/accounts/docs/OAuth2Login


Оригинальный ответ:

Проблема с использованием хэш часть URL для место, который не посылается на сервер и, следовательно, не могут быть использованы в перенаправлении на Страница аутентификации сервера OAuth2.

У вас есть 2 (возможно 3) решения:

  • стоп с использованием хэша для места и перейти к истории HTML5; либо через gwt-pushstate на уровне History, либо custom PlaceHistoryHandler.Historian, если вы используете API мест.Это ограничивает вашу аудиторию: http://caniuse.com/history

  • прекратить использование HTTP-перенаправления, а вместо этого использовать JavaScript, чтобы вы могли поместить хэш в OAuth2 redirect_uri. Поэтому вместо перенаправления отправьте страницу с ошибкой с соответствующими битами скриптов.

  • Некоторые браузеры добавляют хэш к URL после перенаправления, поэтому ваш сервер OAuth2 может выбрать его (в JavaScript) и добавить его в redirect_uri. Это может зависеть от кода состояния HTTP, используемого для перенаправления (из опыта, он работает с 301, но здесь вы не хотите здесь 301). Требуется тестирование.

+0

Фактически вся логика * закладки * страница может считаться решенной, так как я использую действия и места. Но реальная проблема заключается в том, как перехватить (используя EventBus, возможно?) URL-адрес первого входящего запроса (который, очевидно, не удастся, если пользователь еще не авторизовался), сохраните его на стороне клиента и перенаправите пользователя на после получения маркера доступа (после успешного завершения авторизации) – kaffein

+0

Является ли клиентская сторона или серверная сторона перенаправлением? –

+0

Должна быть клиентская сторона, о которой я думаю, так как я думал об обстреле события, когда поток OAuth2 заканчивается, чтобы вызвать перенаправление сохраненного url. Я имею в виду, что пользователь должен закладок GWT-токенизированного URL-адреса (например, этот: http://www.example.com/com.example.gwt.HistoryExample/HistoryExample.html#page1), поэтому я предполагаю, что он должен быть на стороне клиента. – kaffein