java - Websphere Liberty 服务器无法在自定义 TAI 中加载 WebTrustAssociationFailedException

标签 java security websphere single-sign-on websphere-liberty

我正在为实现 OAuth2 的 Websphere Liberty 服务器构建信任关联拦截器 (TAI)。它运行良好,只是当我遇到错误并抛出 WebTrustAssociationFailedException 时,我在服务器日志中收到如下错误:

[4/17/15 15:26:55:523 CDT] 000000b1 com.ibm.ws.webcontainer.security.internal.TAIAuthenticator   E CWWKS9107E: Trust Association Init is unable to load Trust Association class com.ibm.websphere.security.WebTrustAssociationFailedException: called with invalid state param
    at com.ibm.tivoli.monitoring.OAuthTai.OAuthTAI.getBearerToken(OAuthTAI.java:299)
    at com.ibm.tivoli.monitoring.OAuthTai.OAuthTAI.negotiateValidateandEstablishTrust(OAuthTAI.java:420)
    at com.ibm.ws.webcontainer.security.internal.TAIAuthenticator.authenticate(TAIAuthenticator.java:102)
    at com.ibm.ws.webcontainer.security.WebAuthenticatorProxy.handleTAI(WebAuthenticatorProxy.java:163)
    at com.ibm.ws.webcontainer.security.WebAuthenticatorProxy.authenticate(WebAuthenticatorProxy.java:84)
    at com.ibm.ws.webcontainer.security.WebAppSecurityCollaboratorImpl.authenticateRequest(WebAppSecurityCollaboratorImpl.java:724)
    at com.ibm.ws.webcontainer.security.WebAppSecurityCollaboratorImpl.determineWebReply(WebAppSecurityCollaboratorImpl.java:567)
    at com.ibm.ws.webcontainer.security.WebAppSecurityCollaboratorImpl.performSecurityChecks(WebAppSecurityCollaboratorImpl.java:438)
    at com.ibm.ws.webcontainer.security.WebAppSecurityCollaboratorImpl.preInvoke(WebAppSecurityCollaboratorImpl.java:389)
    at com.ibm.wsspi.webcontainer.collaborator.CollaboratorHelper.preInvokeCollaborators(CollaboratorHelper.java:443)
    at com.ibm.ws.webcontainer.osgi.collaborator.CollaboratorHelperImpl.preInvokeCollaborators(CollaboratorHelperImpl.java:267)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1026)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4499)
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:282)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:954)
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:252)
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:584)
    at com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:439)
    at com.ibm.ws.threading.internal.Worker.run(Worker.java:421)
    at java.lang.Thread.run(Thread.java:795)

上面错误中看到的消息“called with invalid state param”是我在抛出异常时提供的消息。

我不明白为什么找不到这个类。在构建期间,我从 com.ibm.ws.webcontainer_1.0.1.jar 获取此类。我本以为服务器已经内置了这个功能。我的 server.xml 已启用它:

<feature>appSecurity-2.0</feature>

但是鉴于它没有找到它,我将这个 jar 添加到服务器上的库中,以便它可以从那里获取它,但这没有什么区别。抛出此异常时,我仍然收到上述错误。由于它是定义的 TAI 接口(interface)的一部分,并且接口(interface)中的其他类(如 TAIResult)不会引起问题,所以我很困惑。

最佳答案

最简单的方法是使用 Java EE 安全性保护您的应用程序,并创建 TAI 来拦截对此应用程序的调用,并使用以下方法根据传递的带有用户 ID 的 token 创建 TAIResult:

public static TAIResult create(int status, Stringprincipal);

这将在 WAS 注册表中找到主要用户,对其进行身份验证并创建 LTPA token 。

您当然不希望或不需要将凭证(例如密码)传递给 WebSphere; TAI 进程不需要实际密码 - 该框架的本质是允许通过替代方式建立信任关系。

此外 - 也没有迫切需要推出自己的 TAI 类和相关的专有 SSO 协议(protocol)( token 、加密等)。

WebSphere 7+ 附带开箱即用的 OAuth 和 SAML TAI(尽管需要进行配置才能设置它们)。这为您提供了两种开放标准规范可供选择。您最终无需在 WebSphere 端编写任何代码。这些 SSO 协议(protocol)已被广泛采用且成熟 - 经过整个行业的 Web 开发人员的审查,如果实现得当,攻击媒介很少或没有。这些方法也不需要 DNS 或域对齐 - 它们被设计为跨域工作。

关于java - Websphere Liberty 服务器无法在自定义 TAI 中加载 WebTrustAssociationFailedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29708850/

相关文章:

java - 如何在 websphere 6.1 中为 ear 配置类加载器(特别是 wsdl4j)

java - 从 websphere 8.5.5.2 访问 ssl web 服务

java - POST 对象的 facebook 格式(到墙上)

java - 从 ArrayList 问题中删除重复项

firefox - 是否有一个 Firefox 插件可以列出导致 "Warning: Contains unauthenticated content"的不安全 Assets

php - 如何使用 PDO 语句保护 PHP 上的搜索页面

Java应用程序日志错误

java - Ada 中的构造函数

java - 为什么 JOptionPane.showInputDialog 不需要父组件参数,但 JOptionPane.showConfirmDialog 需要?

php - 如何清理输入 codeigniter 3?