2013-05-11 3 views
1

Я прочитал много обсуждений об аутентификации, авторизации и т. Д. С услугами REST. Теперь у меня есть идея, как сделать аутентификацию/авторизацию с помощью REST.Контроль доступа к странице с услугой REST

Но я не понял, как контролировать доступ к веб-странице с помощью службы REST. Это хорошая практика? Если да, то как?

Пример:

  • корень REST услуг: LOCALHOST/услуги

  • корень веб-страниц: LOCALHOST/страницы

Теперь, сценарий:

1. Клиент пытается перейти на страницу localhost/pages/join.html, но он не имеет права доступа.

2. Таким образом, сервер должен проверить, имеет ли клиент право доступа к странице, а так как он не имеет права, должен перенаправить клиента куда-нибудь.

Мой вопрос не в том, как сервер будет проверять, понимать, имеет ли клиент право или нет.

Однако, я хочу знать, когда и как я мог выполнить эту проверку и перенаправление с помощью службы REST.

Например, первая мысль, которая приходит на ум мой, в теле join.html с <body onload> запустить яваскрипта, который проверяет права доступа клиента, отправив сообщение JSON для REST службы, скажем, к localhost/services/access.

Затем служба вернет свой ответ, и, если это будет нормально, страница будет загружена, если нет, она будет перенаправлена ​​с помощью window.location.href. Является ли это способом выбора права доступа к веб-странице с помощью службы REST? Есть ли другое общее решение/практика?

Пожалуйста, еще раз, что я не спрашиваю, как обезопасить свой REST API и т.д., но

Как проверить права доступа к своим веб-страницам с REST службы?

ответ

2

Вы можете отправить маркер, полученный от REST API, на веб-сервер, чтобы сохранить его в объекте сеанса браузера-клиента ,

1

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

Как правило, на стороне сервера вы можете использовать перехватчик для перехвата запроса в этом перехватчике, проверить роль пользователя и его право доступа, а затем решить, следует ли перенаправить запрос (или отправить ответ 403) или отправить нормальный ресурс.

Реализация перехватчика зависит от того, какой язык вы используете на стороне сервера.

Например, если вы используете Java (JAX-RS): http://docs.oracle.com/cd/E24329_01/web.1211/e24983/secure.htm#autoId0

Если вы используете сервлет, построить фильтр.

Если вы используете struts2, то перехватчик напрямую поддерживается. и с помощью приложения, разработанного Spring, вы можете использовать AOP для перехвата запроса.

Если вы используете node.js с выражением, вы можете создать промежуточное программное обеспечение, которое обрабатывает логику auth.

Надеется это поможет :)

Обновлено:

поток запроса: получить запрос -> получить маркер клиента (как правило, куки) -> найти роль пользователя в соответствии с этим токен -> проверить, разрешена ли роли доступ к ресурсу -> серверу ресурс

+1

Спасибо за ответ. Я понимаю, что служба REST не подходит для такого рода вещей, не так ли? Итак, скажем, я использую фильтр сервлетов, например, и он находится в другом проекте (.war), чем мои службы REST. Как я могу понять, прошел ли аутентификация пользователя с помощью моих служб REST? (не используя базу данных). Поскольку клиент посылает маркер, куки-файлы или что-то другое для сервлета, взятого из службы REST, Servlet не сможет проверить этот токен, так как он не имеет правильного. Итак, я должен спросить об этом в моем сервисе REST из Сервлета? Это не кажется хорошей практикой, верно? –

+0

Контроль доступа должен быть привязан к серверу службы отдыха, см. Мой обновленный ответ. – ltebean

+1

Но вещь, которую я не вижу, - это: requeest сделан в /pages/a.html, который не является службой REST. Как прервать это и использовать службу REST? –

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