2017-02-15 11 views

ответ

0

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 документация:

+0

Благодаря Скотт. Я не использовал какой-либо индивидуальный TAI. Я задавался вопросом, после того, как аутентификация выполняется com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor. Запрос отправляется на мой сервлет А. Могу ли я использовать TAIResult в сервлете A для заполнения объекта? Или любой пример кода для заполнения объекта? – rickcoup

+0

Я имел в виду, не имея необходимости делать пользовательские TAI. – rickcoup

+0

Если вы перенаправляете сервлет, который является защищенным ресурсом, объект должен быть доступен. Я не уверен, что он доступен в первоначальном неавторизованном запросе, даже если произошла аутентификация TAI. –