我已将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