Пусть /users/{id}
будет URL ресурса в службе RESTful.
Обычная проверка подлинности разрешена, и доступ только к аутентифицированным пользователям разрешен для доступа к URL.
Пример сценария:
User_1
и User_2
являются аутентифицированными пользователями с параметрами userId 1 и 2.
Поскольку оба они аутентифицированы, оба из них имеют доступ к
-
/users/1
-
/users/2
Но ожидание User_1
должно иметь доступ к /users/1
, а не к /users/2
или другому userId.
Вопрос: Как выполнить авторизацию уровня ресурса в службах RESTful?
Примечание. Я использую RESTful, используя Jax-RS (с реализацией Apache CXF), полезно, если вы могли бы объяснить Jax-RS.
-Barath
Edit:
Как упоминал Донал, я не ищу авторизацию на основе роли, а не авторизацию на уровне ресурсов.
Чтобы привести пример, скажем, /users/ {id}/photos/{photoId} - еще один URL ресурса. Пользователю_1 должен быть предоставлен доступ к фотографиям только для него. Если в файле photoId из 2, принадлежащих user_2, тогда мы должны указать код ошибки http_404 для user_1, когда запрашивается запрос /users/ 1/photos/2. [Так как User_1 также является аутентифицированным пользователем, он может вызывать /users/ 2/photos/2, поэтому мы должны идентифицировать идентификатор пользователя на основе параметров проверки подлинности, кроме URL-адреса ресурса]
Единственное решение, о котором я могу думать, - это указать уникальный идентификатор, определяющий авторизацию в каждом запросе типа
Вместо SELECT * FROM PHOTO_TBL WHERE PHOTO_ID=2;
использовать SELECT * FROM PHOTO_TBL, USER_TBL WHERE PHOTO_ID=2 AND USER_ID=1 AND USER_ID=PHOTO_ID;
с этими ресурсами доставляются данные, принадлежащие конкретному пользователю. [Должен существовать механизм предотвращения модификации уникального идентификатора на стороне клиента, который используется для принятия решения о авторизации (userId в этом случае), поскольку все запросы - это запрос STATELESS]
Предостережение: Каждый запрос должен быть достаточно интеллектуальным, чтобы понимать проблемы безопасности и включать дополнительное соединение. Это плохой дизайн для привязки логики безопасности к каждой бизнес-функции.
Мне еще предстоит изучить Spring безопасность и как ее можно использовать в этом случае.