2013-04-15 2 views
1

В настоящее время мы работаем над приложением REST, используя Dropwizard на стороне сервера и RequireJS, Backbone на стороне клиента.Обработка ошибок аутентификации на стороне клиента

Наша модель аутентификации основана на файлах cookie. По каждому запросу веб-фильтр проверяет наличие соответствующего файла cookie и его значения, токена. Если маркер остается в силе, он перенаправляет запрос на цепи фильтра, если он не будет отвечать 401.

На стороне клиента заканчивается, как:

do an ajax request: 
    success: 
     render the rest of the content 
    error: // got 401 
     stop whatever you were doing and redirect to the login page 

только Недостаток этого подхода заключался в том, что клиенту сначала нужно загрузить фактическую страницу, прежде чем она будет перенаправлена ​​на страницу входа (в случае, конечно, 401).

Например, у меня есть две страницы a.html и b.html. Если клиент просматривает страницу a.html, и через некоторое время его токен истекает, сначала ему нужно загрузить b.html, который выполнит запрос ajax в фоновом режиме (см. Выше), а затем я смогу перенаправить его на страницу входа в систему:

a.html (200) -> token expired -> b.html (200) -> login.html (200) 

До сих пор я использовал такой стиль обработки ошибок в каждом приложении REST, которое мы написали. То, что я хотел бы видеть, например,:

a.html (200) -> token expired -> login.html (200) 

, но это потребовало бы, например, жесткого кодирования Логин URL страницы на стороне сервера фильтр и, как правило, связывая некоторую логику в стороне сервера кода.

Я уверен, что существуют лучшие способы обработки ошибок аутентификации сервера на стороне клиента, и я хотел бы узнать о них.

ответ

0

Почему вы не используете Dropwizard, встроенный в аутентификацию [1]? Как указано в списке рассылки [2], вы можете написать свой собственный BasicAuthProvider, в котором у вас будет доступ к HttpContext.

Надеюсь, это поможет.

Пока, Пьеро

[1] http://dropwizard.codahale.com/manual/auth/

[2] https://groups.google.com/d/msg/dropwizard-user/NyvxbefQ1FE/vexCdTHdFuYJ

Смежные вопросы