Я реализовал com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor в соответствии с этой статьей https://www.ibm.com/developerworks/library/mw-1612-lansche-trs/index.html. И это кажется рабочим. У кого-нибудь есть пример кода для заполнения объекта из TAIResult?Как заполнить тему из TAIResult?
ответ
IBM SAML TAI (com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor
является IBM предоставленного классом Java. Это реализация структуры WebSphere Trust Association Interceptor и использует спецификацию SAML для установления доверительных отношений, без необходимости писать пользовательские Java-код.
Основываясь на формулировка вашего вопроса звучит так, как если бы вы могли вместо этого следовать ссылке в этой статье на гораздо более старый (но все еще действительный) technical article о базовой структуре TAI. Это руководство полностью описывает написание пользовательского кода, который реализует интерфейс IBM Java (com.ibm.wsspi.security.tai.TrustAssociationInterceptor
) с вашей собственной логикой доверия и охватывает метод public TAIResult negotiateValidateandEstablishTrust()
, который вы должны реализовать.
Чуть ниже в TAI article представляет собой обзор трех статических методов в классе TAIResult, чтобы помочь вам заполнить идентичность:
Класс TAIResult имеет три статические методы для создания TAIResult, все из которых всегда возьмите int как первый параметр. Этот параметр , как ожидается, будет действительным запрос HTTP код возврата ...
Вы можете построить Subject
в два пути: у WebSphere зделать автоматически providing a userid string (и позволяющий WebSphere для запроса хранилища пользователей) или вручную , по programmatically creating one. Ручной подход является самым мощным - вы можете делать все от создания «эфемерного» пользователя «на лету», включая членство в группах, или вы можете использовать другие API WAS для создания полностью заполненного Subject
, а затем изменить его - например, для добавления группы членство «на лету» (а не в базовом репозитории пользователей).
В каждом из Subject
имеется код в разделе «Использование TAI» в definitive guide to WAS authentication and TAI implementation.
Если вы создаете свой собственный Subject
или добавляете собственные объекты учетных данных, убедитесь, что классы сериализуемы - см. Раздел статьи о распространении.
Просто предоставить некоторые примеры кода, вот пример из статьи, которая описывает полностью строит Subject
на лету в методе negotiateValidateandEstablishTrust()
:
String userid = "the_user_id"; //get from request, etc
InitialContext ctx = new InitialContext();
UserRegistry reg =(UserRegistry)ctx.lookup("UserRegistry");
String uniqueid = reg.getUniqueUserID(userid);
//define groups
ArrayList groups = new ArrayList();
// add admin group
groups.add(reg.getUniqueGroupId("Administrators"));
// stash in hashtable
Hashtable hashtable = new Hashtable();
hashtable.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID,uniqueid);
hashtable.put(AttributeNameConstants.WSCREDENTIAL_SECURITYNAME,userid);
hashtable.put(AttributeNameConstants.WSCREDENTIAL_GROUPS,groups);
hashtable.put(AttributeNameConstants.WSCREDENTIAL_CACHE_KEY,uniqueid+"MyCustom");
Subject subject = new Subject();
subject. getPublicCredentials().add(hashtable);
return TAIResult.create(HTTPServletResponse.SC_OK, "ignored", subject);
В SAML TAI IBM, вы упоминаете, они сами реализовать выше, чтобы читать XML-документы SAML разных вкусов от HttpServletRequest
и обрабатывать их, создавая эфемерную или идентификационную информацию реестра в зависимости от конфигурации.
Key документация:
- Advanced authentication in WAS (охватывает структуру TAI и другие точки штекерные)
- TrustAssociationInterceptor Javadoc
- TAIResult Javadoc
- IBM SAML TAI Overview
Благодаря Скотт. Я не использовал какой-либо индивидуальный TAI. Я задавался вопросом, после того, как аутентификация выполняется com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor. Запрос отправляется на мой сервлет А. Могу ли я использовать TAIResult в сервлете A для заполнения объекта? Или любой пример кода для заполнения объекта? – rickcoup
Я имел в виду, не имея необходимости делать пользовательские TAI. – rickcoup
Если вы перенаправляете сервлет, который является защищенным ресурсом, объект должен быть доступен. Я не уверен, что он доступен в первоначальном неавторизованном запросе, даже если произошла аутентификация TAI. –