我已经根据这篇文章https://www.ibm.com/developerworks/library/mw-1612-lansche-trs/index.html实现了 com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor 。它似乎工作。任何人都有从 TAIResult 填充主题的示例代码?
1 回答
IBM SAML TAI (是 IBM 提供的com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor
Java 类。它是 WebSphere Trust Association Interceptor 框架的实现,并使用 SAML 规范来建立信任,而无需编写自定义 Java 代码。
根据您问题的措辞,您似乎可能已经按照该文章中的链接访问了一篇关于底层 TAI 框架的更早(但仍然有效)的技术文章。com.ibm.wsspi.security.tai.TrustAssociationInterceptor
本指南绝对描述了使用您自己的信任逻辑编写实现 IBM Java 接口 ( ) 的自定义代码,并涵盖了public TAIResult negotiateValidateandEstablishTrust()
您必须实现的方法。
TAI 文章中稍低一点的是对 TAIResult 类中的三个静态方法的概述,以帮助您填充标识:
TAIResult 类具有三个用于创建 TAIResult 的静态方法,所有这些方法都始终将 int 作为第一个参数。此参数应为有效的 HTTP 请求返回码...
您可以通过两种方式构建一个Subject
:通过提供用户标识字符串(并允许 WebSphere 查询用户存储库)让 WebSphere 自动创建一个,或者通过编程方式手动创建一个。手动方法是最强大的——你可以做任何事情,从动态创建一个“临时”用户,包括组成员资格——或者你可以使用其他 WAS API 创建一个完全填充的Subject
然后修改它——例如添加组成员资格即时(而不是在底层用户存储库中)。
在WAS 身份验证和 TAI 实现Subject
的权威指南中的“TAI 使用”部分中提供了每种方法的代码示例。
如果您确实构建自己的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);
在您提到的 IBM 的 SAML TAI 中,他们自己实现上述内容以从中读取各种风格的 SAML XML 文档HttpServletRequest
并对其进行处理,根据配置构建临时或注册用户身份。
关键文件:
- WAS 中的高级身份验证(涵盖 TAI 框架和其他插件点)
- TrustAssociationInterceptor javadoc
- TAIResult javadoc
- IBM SAML TAI 概述