我正在为实现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)
使用无效状态参数调用消息""在上面的错误中看到的是我在抛出异常时提供的消息。
我不明白为什么找不到这门课。在构建期间,我从com.ibm.ws.webcontainer_1.0.1.jar获取此类。我原以为服务器已经内置了这个。我的server.xml启用了它:
<feature>appSecurity-2.0</feature>
但鉴于它没有找到它,我将这个jar添加到服务器上的库中,这样就可以从那里获取它,但这没有任何区别。抛出此异常时仍然会出现上述错误。由于它是定义的TAI接口的一部分,并且像TAIResult这样的界面中的其他类没有问题,我很困惑。
答案 0 :(得分:0)
最简单的方法是使用Java EE安全保护您的应用程序并创建拦截对此应用程序的调用的TAI,并使用以下用户ID基于传递的令牌创建TAIResult:
public static TAIResult create(int status,String principal);
这将在WAS注册表中找到主要用户,对其进行身份验证并创建LTPA令牌。
您当然不希望或需要将凭据(例如密码)传递给WebSphere; TAI流程不需要实际的密码 - 框架的本质是通过替代方式允许信任关系。
此外 - 还没有迫切需要推出自己的TAI类和相关的专有SSO协议(令牌,加密等)。
WebSphere 7+提供开箱即用的OAuth和SAML TAI(尽管需要配置才能设置它们)。这为您提供了两种开放式标准规格供您选择。您最终在WebSphere端没有编写代码。这些SSO协议被广泛采用并成熟 - 由整个Web开发人员行业审核,如果正确实施,很少或没有攻击媒介。这些方法也不需要DNS或域对齐 - 它们旨在跨域工作。
答案 1 :(得分:0)
这是一个错误的错误信息的简单案例。它似乎是说找不到WebTrustAssociationFailedException
类,但事实并非如此。它实际上只是报告异常被抛出。 Websphere团队有一个内部缺陷来纠正消息,并将在未来的版本中修复。现在可以安全地忽略它。