![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Key |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 6.12.2007 Репутация: нет Всего: 1 |
Пробую реализовать аутентификацию для веб-сервисов через токены.
Есть сервис, стандартный STS (Security Token Service), который генерирует токены. У него есть методы реквеста, валидации, инвалидации и renew токенов. Я использую Axis2, но такие сервисы есть у всех популярных библиотек. Он у меня генерит SAML 2.0 токены, так как в гугле они в основном попадались =) это XML где записаны дата создания, срок действия токена, различные аттрибуты юзера, для которого генериться токен (имя, фамилия и т.п.) (CLAIMS) Есть защищенный сервис с разными методами, который должен требовать токены для доступа к своим методам. Также есть веб или десктоп клиент который использует этот защищенный сервис, вызывает его методы для своего функционала. Так вот, не подскажите как реализовать такую архитектуру. Во всех статьях написано как взять токен с STS сервиса, но непонятно что делать с ним дальше. Я посылаю запрос генерации токена от клиента к сервису STS. В запросе также указаны названия дополнительных атрибутов юзера, которые нужно взять с базы и включить в токен при генерации(имя и фамилия юзера). STS сервис лезет в базу юзеров и генерит токен. Для доступа к STS сервису я использую стандартный STSClient для аксиса, который просто использует ServiceClient. А вот дальше непонятно что делать. Я так понял нужно настроить спец Policy для защищенного сервиса. В примерах используют елемент IsuedToken в policy файле сервиса, в котором указан адрес STS сервиса. Я конфигурю эти полиси для веб-сервиса и клиента, но при запросе методов защищенного сервиса, оно лезет на STS за токеном. Как сделать чтоб оно использовало токен полученый ранее? Передавать токен в хидере SOAPа? Если оно увидет его оно за ним не полезет? Потом при получении токена как нужно делать его валидацию в защищенном сервисе? Надо вытаскивать его с СОАП хидера и отправлять STS сервису запрос валидации? А чтоб получить атрибуты которые записаны в токене нужно тоже его вытаскивать с хидера и парсить? Совсем запутался с этими токенами =) Какая тут правильная архитектура? как стандартно делают? Клиент должен запрашивать токен передавая логин и пароль или использовать сразу сервис чтоб он сам отправил запрос за токеном? Но во втором случае непонятно как передать логин и пароль STS сервису, чтоб вставить в токен дополнительные атрибуты для юзера и проверить есть ли юзер в базе. И как правильно делать валидацию токенов? И еще вопрос, когда я в клиенте получил сгенереный токен, его нужно записать в память и использовать пока не истечет его срок действия, а потом запрашивать опять? |
|||
|
||||
Key |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 6.12.2007 Репутация: нет Всего: 1 |
Вот нашел как оно должно быть в одном из блогов
Почитал в архитектурных паттернах что клиент может кешировать полученый токен у себя пока он будет валидный. В токен тогда можно вшить атрибут сколько раз его можно использовать. Осталось только с 4 пунктом разобраться. Чтоб он не лез к STS за токеном я так понял нужно вставлять токен в СОАП и в элементе IssuerAddress в policy ставить левый адрес и ссылку на токен в этом же соапе, только осталось найти как это сделать =) И на сколько я понял в Axis2 нужно всетаки выдирать атрибуты в токене с соап хидера, после того, как он будет раскодирован и проверять его на валидность таким же способом. Что-то не очень красиво =) Посмотрим что выйдет. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |