Расширение распространения WebSphere SAML Identity - PullRequest
0 голосов
/ 17 июня 2019

У меня есть финансовое приложение, которое использует шлюз API для аутентификации пользователей в сети. Этот шлюз поддерживает сеанс безопасности для пользователя и передает вызовы SOAP в ящик WebSphere. Он добавляет подписанное утверждение SAML к этим вызовам SOAP.

Ряд служб JAX-WS развернут в WebSphere, и они защищены политиками WebSphere для использования утверждений SAML. Идентификационные данные и членство в группах, указанные в утверждениях SAML, затем передаются в контекст безопасности WebSphere для вызова службы. Все работает очень хорошо, вся логика безопасности выполняется исключительно с помощью конфигурации.

Новые требования теперь требуют, чтобы мы распространяли sessionId в шлюзе API вплоть до WebSphere и далее. Это по причинам прослеживаемости.

Очевидно, что мы могли бы изменить WSDL для всех сервисов, включив в него некоторые поля метаданных, но это большое изменение и потребовало бы очень обширного тестирования.

Я надеялся, что может быть способ сопоставить некоторые произвольные атрибуты из утверждения SAML (кроме Identity и groupMembership) с контекстом безопасности WebSphere. Или даже для доступа к XML SAML в (аутентифицированной) службе JAX-WS.

Кто-нибудь делал это?

Ответы [ 2 ]

1 голос
/ 18 июня 2019

У вас может быть API-шлюз для добавления sessionid в качестве атрибута SAML, а затем получить атрибут из Subject после обработки SAML WebSphere. Вот пример кода для получения атрибута SAML в WebSphere после обработки SAML.

    Subject subject = WSSubject.getRunAsSubject();


    SAMLToken samlToken = (SAMLToken) AccessController.doPrivileged(
                new java.security.PrivilegedExceptionAction() {
                    public Object run() throws java.lang.Exception
                    {
                        final java.util.Iterator authIterator = subject.getPrivateCredentials(SAMLToken.class).iterator();
                        if ( authIterator.hasNext() ) {
                            final SAMLToken token = (SAMLToken) authIterator.next();
                            return token;
                        }
                        return null;
                    }
                });

    Map<String, String> attributes = samlToken.getStringAttributes();
    List<SAMLAttribute>  attributes = samlToken.getSAMLAttributes();
0 голосов
/ 20 июня 2019

Вместо того, чтобы циклически просматривать кредиты, вы можете использовать API-интерфейс WSSUtilFactory, чтобы сделать это для вас: https://www.ibm.com/support/knowledgecenter/SSAW57_9.0.0/com.ibm.websphere.javadoc.doc/web/apidocs/com/ibm/websphere/wssecurity/wssapi/WSSUtilFactory.html

Если вы используете токен SAML 2.0, вы можете сделать:

WSSUtilFactory wssuf = WSSUtilFactory.getInstance();
SAMLToken token = wssuf.getSaml20Token();

Метод getSaml20Token был добавлен в WSSUtilFactory в 70043, 80013, 85510 и 9000.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...