如何为IBM WAS 8设计和部署自定义信任关联拦截器

时间:2017-09-14 16:08:05

标签: java security websphere single-sign-on saml-2.0

我已将Idp启动的SSO设置为OneLogin作为IdP,WebSphere设置为SP。当用户在IdP端访问相同的链接时(使用IBM默认的ACSTrustAssociationInterceptor),已经能够成功地让用户登录我的Portal应用程序。

现在的问题是,登录后,门户网站应用程序需要在动态缓存中加载一些用户特定信息,以便显示/运行所有portlet。所以我正在尝试编写自定义信任关联拦截器,但我无法想象它在Websphere上部署。 IBM文档提到创建一个新的拦截器类并创建默认的自定义属性,但没有提到这些属性是什么。

此外,在我的自定义拦截器中,如何访问IdP发送的SAML响应并从中提取属性。

需要实现的另一个功能是,如果在SP端的应用程序中不存在由IdP传递的SAML响应中的用户Id,则应自动创建用户,然后在SP端登录到应用程序。我无法弄清楚如何做到这一点。

上述查询的任何工作示例或代码指针都将非常感激。

下面是我尝试为Custom Interceptor编写的一个非常基本的代码。这里的" callCustomInterceptor"是一个查询参数,我将在中继状态URL和" uid"是将在SAML响应中进入的用户的用户标识。这有用吗?

enter code here
private static final String CUSTOM_TAI_VERSION = "1.0.0";
private static final String CUSTOM_TAI_TYPE = "Custom Trust Association Interceptor";

@Override
public void cleanup() {
    // TODO Auto-generated method stub
    System.out.println("*****##### Custom SSO TAI - Inside cleanup Method #####*****");
}

@Override
public String getType() {
    // TODO Auto-generated method stub
    System.out.println("*****##### Custom SSO TAI - Inside getType Method #####*****");
    return CUSTOM_TAI_TYPE;
}

@Override
public String getVersion() {
    // TODO Auto-generated method stub
    System.out.println("*****##### Custom SSO TAI - Inside getVersion Method #####*****");
    return CUSTOM_TAI_VERSION;
}

@Override
public int initialize(Properties arg0) throws WebTrustAssociationFailedException {
    // TODO Auto-generated method stub
    System.out.println("*****##### Custom SSO TAI - Inside initialize Method #####*****");
    System.out.println("*****##### Initializing Custom SSO TAI #####*****");
    return 0;
}

@Override
public boolean isTargetInterceptor(HttpServletRequest arg0) throws WebTrustAssociationException {
    // TODO Auto-generated method stub
    System.out.println("*****##### Custom SSO TAI - Entering isTargetInterceptor Method #####*****");

    System.out.println("Determining if this TAI should handle the incoming request...");

    if (arg0.getParameter("callCustomInterceptor") != null) {
        System.out.println("callCustomInterceptor: " + arg0.getParameter("callCustomInterceptor"));
        System.out.println("Custom SSO TAI is being used to establish trust!");
        return true;
    }

    System.out.println("Bypassing Custom SSO TAI, did not find a user ID in the request");
    System.out.println("*****##### Custom SSO TAI - Exiting isTargetInterceptor Method #####*****");

    return false;
}

@Override
public TAIResult negotiateValidateandEstablishTrust(HttpServletRequest arg0, HttpServletResponse arg1)
        throws WebTrustAssociationFailedException {
    // TODO Auto-generated method stub
    System.out.println("*****##### Custom SSO TAI - Entering negotiateValidateandEstablishTrust Method #####*****");
    String userId = arg0.getParameter("uid");
    if (userId.equals("portalUser")) {
        System.out.println("*********** CustomSSOTAI *****************");
        System.out.println("UserID = " + userId);
        return TAIResult.create(SipServletResponse.SC_OK, userId);
    }

    System.out.println("*****##### Custom SSO TAI - Exiting negotiateValidateandEstablishTrust Method #####*****");
    return TAIResult.create(SipServletResponse.SC_FORBIDDEN, userId);
}

PS:SAML响应仅签名。

任何指针都会有所帮助。

温暖的问候, Ekansh

0 个答案:

没有答案