扩展WebSphere SAML Identity传播

时间:2019-06-17 15:40:42

标签: security websphere saml

我有一个现有的财务应用程序,该应用程序使用API​​网关来验证基于Web的用户。该网关为用户维护安全会话,并将SOAP调用代理到WebSphere框。它将签名的SAML断言添加到这些SOAP调用中。

一系列JAX-WS服务已部署在WebSphere上,并通过WebSphere策略加以保护以使用SAML断言。然后,将SAML断言中指定的身份和组成员身份传播到服务调用的WebSphere安全上下文。一切工作都很好,所有安全逻辑完全由配置完成。

现在,新要求要求我们将API会话中的sessionId一直传播到WebSphere以及以后。这是出于可追溯性的原因。

很明显,我们可以将所有服务的WSDL更改为包括一些元数据字段,但这是一个很大的更改,并且需要非常广泛的测试。

我希望有一种方法可以将SAML断言中的某些任意属性(除了Identity和groupMembership之外)映射到WebSphere安全上下文。甚至甚至可以访问(通过身份验证的)JAX-WS服务中的SAML XML。

有人这样做吗?

2 个答案:

答案 0 :(得分:1)

您可以让API网关将sessionid添加为SAML属性,然后在WebSphere处理SAML之后从Subject中检索该属性。这是处理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();

答案 1 :(得分:0)

您可以使用WSSUtilFactory API来代替自己遍历证书: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方法已添加到70043、80013、85510和9000中的WSSUtilFactory中。