LINUX.ORG.RU

REST, JAX-RS, аутентификация, ржавый топор

 ,


0

1

Есть glassfish 4.1. Надо запилить REST API с опциональной аутентификацией.

Согласно этому ихнему REST имя/пароль посылается с каждым запросом. Ну или не посылается, опционально же.

Использоваться будет жабоскриптом из браузера.

Хотел имя/пароль упаковать в JSON и посылать в теле запроса, но сервер его игнорирует нафиг, если запрос не POST.

Хотел сделать через basic authentication, но понятия не имею как запилить аутентификацию опционально - если хедер «Authorization» есть и аутентификация не прошла, надо выдать ошибку, если хедера нет, значит анонимус.

Как?



Последнее исправление: suuaq (всего исправлений: 3)

Зачем передавать с каждым запросом логин/пароль? Есть же сессии, сделанные через куки. Любым вменяемым явовским контейнером поддерживаются, да и тот же basic auth через них работает.

Nagwal ★★★★
()

Хотел имя/пароль упаковать в JSON и посылать в теле запроса, но сервер его игнорирует нафиг, если запрос не POST.

Где находится тело запроса, если это не POST?

bbk123 ★★★★★
()
Ответ на: комментарий от suuaq

Через два \n после последнего хедера.

И какой HTTP запрос ты посылаешь?

bbk123 ★★★★★
()
Ответ на: комментарий от suuaq

И что, если создатели спеки выдумали костыльный способ сохранять stateless сервисов - надо эту хуйню как мартышка повторять?

Nagwal ★★★★
()
Ответ на: комментарий от suuaq

Прямо в сессии держать ничего не надо, но положить кукой auth token вполне допустимо. Главное что бы токены хранились не в памяти сервера, а в общем хранилище. Да и обычную сессию можно заюзать при условии что ничего-ничего кроме авторизации ты туда не пложешь. А вот таскать каждый раз логин и пароль - крайне не секьюрно.

dizza ★★★★★
()
Ответ на: комментарий от suuaq

Я пилил в свое время фильтр для джерси: https://jersey.java.net/documentation/latest/filters-and-interceptors.html

Ну а дальше как бы просто - токен выдается всегда, но он по дефолту анонимный, после логина он связывается с юзвером (в мемкеше запись). На каждый запрос вынимаешь этот токен, из мемкеша смотришь кто он там, аноним или залогиненный, профит.

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 1)
Ответ на: комментарий от suuaq

Ага. Но я не думаю что это имеет особое значение.

dizza ★★★★★
()
Ответ на: комментарий от dizza

Плюсую. Большинство http сервисов так и организовано.

На сервере мемкеш или редис с парой токен-[account_id:ttl]. Сессия начинается постом пары логин/пароль на аутентификационный урл, который выдает токен и время валидности. Токен добавляется в хедер как X-SOME-SCURE-BLAH-BLAH-BLAH=«token». Урлы требующие аутентификацию/авторизацию извлекают id модели акка из мемкеша/редиса и юзают если ttl не истек. Как истек - гет один запрос на аутентификационный урл с выставленным хедером - в ответ новый токен. И так далее

ioway
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.