Как получить имя пользователя из системы openSSO/openAM?

В настоящее время я использую openAM для защиты своего небольшого веб-приложения с помощью веб-агента Java EE. Кто-то пытается получить доступ к приложению, он перенаправляется на экземпляр openAM, входит в систему и переходит в приложение. Простые вещи.

Я бы хотел, чтобы openAM передал имя пользователя, которое было успешно использовано в веб-приложении. Насколько я понимаю, для этого следует использовать «атрибуты сеанса». Находясь в админке, я захожу в свой веб-агент Java EE и открываю вкладку «Приложение», чтобы увидеть «Обработку атрибутов сеанса». Я вижу, что HTTP_COOKIE — это выбор для получения.

1) следует ли ожидать, что имя пользователя, если оно правильно настроено, будет отображаться в файле cookie в виде открытого текста? 2) какое значение я должен ввести в отображении сеанса, чтобы получить имя пользователя? Как найти, какое значение в хранилище данных соответствует этому?

Спасибо


person Goren    schedule 05.04.2012    source источник


Ответы (2)


Мы используем HTTP_HEADER с нашими агентами. Итак, если вы уже используете агентов (что звучит так, как будто вы используете), то следующее должно работать для вас. В веб-консоли OpenAM:

  • Управление доступом> Область верхнего уровня> Агенты> Интернет / J2EE / и т. д.> щелкните агент
  • Вкладка «Приложение» > раздел «Обработка атрибутов профиля» > «Режим выборки атрибутов профиля»:
  • Нажмите на вариант «HTTP_HEADER».
  • Сопоставление атрибутов профиля:
  • Ключ карты: [uid]... Соответствующее значение карты: uid
  • Щелкните Добавить. После добавления он должен выглядеть как [uid]=uid. Добавьте любое другое необходимое сопоставление, которое соответствует атрибутам вашей серверной системы аутентификации. Наш ldap.

В своем веб-приложении извлеките элементы заголовка HTTP и найдите токен. Это должно выглядеть примерно так: AQIC5wM2LY4RfckcedfzxGrgVYevbKR-SgBkuemF4Cmm5Qg.AAJTSQABMDE.

Затем вы можете использовать интерфейс OpenAM REST для проверки и получения атрибутов, связанных с токеном, таких как имя пользователя, пароль, cn и т. д. Чтобы получить все атрибуты, URL-адрес будет таким:

http://<OpenAM_Host>:<Port>/<deploy_uri>/identity/attributes?subjectid=AQIC5wM2LY4RfckcedfzxGrgVYevbKR-SgBkuemF4Cmm5Qg.*AAJTSQABMDE.*

Вы также можете указать нужные атрибуты следующим образом:

http://<OpenAM_Host>:<Port>/<deploy_uri>/identity/attributes?subjectid=AQIC5wM2LY4RfckcedfzxGrgVYevbKR-SgBkuemF4Cmm5Qg.*AAJTSQABMDE.*&attributenames=uid&attributenames=userpassword

Ссылки:
https://wikis.forgerock.org/confluence/display/openam/Use+OpenAM+RESTful+Services
http://openam.forgerock.org/openam-documentation/openam-doc-source/doc/dev-guide/index/chap-rest.html

person n2studio    schedule 30.01.2014

1) да, агент будет создавать файлы cookie с открытым текстом (и если пользователь отправляет вредоносные файлы, он будет воссоздавать их в порядке), однако использование метода HTTP_HEADER для передачи атрибутов считается лучшим решением (поскольку он не хранится на стороне клиента) .

2) Обработка атрибутов сеанса работает только в том случае, если вы действительно что-то сохранили в сеансе. Для этого вы можете либо использовать функцию «Сопоставление атрибута пользователя с атрибутом сеанса» во всех основных настройках аутентификации, либо написать какой-нибудь пользовательский модуль для сохранения производных значений. В противном случае, если вы просто хотите получить uid пользователя, используйте обработку атрибутов профиля (значение ключа uid HTTP_UID, и ваше приложение увидит файл cookie/заголовок HTTP_UID).

person Peter Major    schedule 06.04.2012
comment
Спасибо! Если бы я просто использовал хранилище данных, включенное в дистрибутив openAM, я получил... как мне узнать, что такое ключ для идентификаторов пользователей? - person Goren; 09.04.2012
comment
Это зависит от того, какое у вас хранилище данных, обычно, когда вы используете LDAP, вы можете использовать ldapsearch для поиска записей, а также атрибут именования — uid. С другой стороны, если вы используете Active Directory, то атрибут именования — cn. Но в основном вы должны иметь доступ к своему собственному хранилищу данных и просматривать его, чтобы получить идентификаторы пользователей. - person Peter Major; 12.04.2012