当前位置: 首页 > 知识库问答 >
问题:

OpenAM/OpenSSO HttpServletRequest.login(user,pass)失败,出现“无效传输字符串”。这是什么意思?

卢才艺
2023-03-14

我有两个tomcat服务器,一个带有OpenAM12,一个带有主要的web应用程序。已知:HTML页面可以毫无问题地进行身份验证,使用OpenAM java SDK的编程登录可以在servlet中工作。

失败的是调用HttpServletRequest.login(用户名、密码)

    <Realm className="com.sun.identity.agents.tomcat.v6.AmTomcatRealm" debug="99"/>

以下是我在AM J2EEAgent调试日志中看到的错误:

amRealm:01/29/2014 02:29:47:497 PM EST: Thread[http-bio-443-exec-3,5,main]
SSOTokenValidator: validate failed with exception
[AgentException Stack]
com.sun.identity.agents.arch.AgentException: Invalid transport string
        at com.sun.identity.agents.util.TransportToken.initializeFromString(TransportToken.java:135)
        at com.sun.identity.agents.util.TransportToken.<init>(TransportToken.java:115)
        at com.sun.identity.agents.common.SSOTokenValidator.validate(SSOTokenValidator.java:99)
        at com.sun.identity.agents.realm.AmRealm.authenticate(AmRealm.java:143)
        at com.sun.identity.agents.tomcat.v6.AmTomcatRealm.authenticate(AmTomcatRealm.java:106)
        at org.apache.catalina.realm.CombinedRealm.authenticate(CombinedRealm.java:146)
        at org.apache.tomee.catalina.TomEERealm.authenticate(TomEERealm.java:43)
        at org.apache.catalina.authenticator.AuthenticatorBase.doLogin(AuthenticatorBase.java:818)
        at org.apache.catalina.authenticator.AuthenticatorBase.login(AuthenticatorBase.java:800)
        at org.apache.catalina.connector.Request.login(Request.java:2621)
        at org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1065)

共有1个答案

江承嗣
2023-03-14

用户名/密码组合的请求#登录失败,因为代理在server.xml中定义了自己的Tomcat领域定义(AmTomcatRealm)。代理的领域不使用用户名/密码组合来验证用户,因为证书甚至不应该在那里出现(OpenAM执行身份验证,然后在您到达实际受保护的应用程序之前,密码早就消失了),实际上有点令人担忧的是,您仍然可以访问用户的密码。

由于代理实际上不应该知道用户的密码,所以它使用一个传输字符串,该字符串包含几个信息(其中包括会话ID),它的格式非常不明确,以下是相关源代码的一些链接:https://svn.forgerock.org/openam/trunk/openam-agents/jee-agents/jee-agents-sdk/src/main/java/com/sun/identity/agents/util/transportToken.java

此外,这不是一个先有鸡后有蛋的问题,因为假定JAAS登录是由代理本身执行的,实际上并不期望应用程序一开始就调用登录。在代理设置中(当然还有web.xml--参见容器文档),有一些方法可以启用JAAS表单登录支持,然后代理就可以处理JAAS集成,而不需要了解专有传输字符串格式。

 类似资料:
  • 我是java初学者,我对上述程序的输出感到困惑。请给我解释一下输出的原因。

  • 问题内容: 我正在查看类似于以下内容的代码行: 我认为符号字符串是指每小时,每分钟等显示的数字字符的数量-或类似的东西,我不确定。 通常,我可以弄清楚这种情况,但是在Google上搜索“%02d%01d”时找不到任何有用的参考。有人能为我阐明一下吗? 问题答案: http://www.cplusplus.com/reference/clibrary/cstdio/printf/ 相同的规则应适用于

  • 问题内容: 我在阅读$ _SESSION [‘username’]进入SQL查询之前是否需要转义? 它说:“无论源如何,都需要对传递给sql查询的每个字符串进行转义”。现在我知道类似这样的事情是非常基本的。Google搜索显示超过20,000个结果。仅Stackoverflow就有20页的结果,但是没有人实际解释转义字符串是什么或如何转义。只是假设。你能帮助我吗?我想学习,因为我一如既往地使用PH

  • com.sun.identity.agents.arch.agentException:在com.sun.identity.agents.util.transportToken.initializeFromString(TransportToken.java:135)在com.sun.identity.agents.util.transportToken.(TransportToken.java:

  • 问题内容: 当我执行以下代码时,输​​出为“ nullHelloWorld”。Java如何处理null? 问题答案: 您正在尝试将值连接到。这由“字符串转换”控制,当一个操作数是a时发生,该转换被JLS的5.1.11节覆盖: 现在只需要考虑参考值: 如果引用为null,则将其转换为字符串“ null”(四个ASCII字符n,u,l,l)。

  • 我在Linux中使用的Java版本是: OpenJDK版本“16.0.2”2021-07-20 OpenJDK运行时环境(构建16.0.2+7) OpenJDK 64位服务器VM(构建16.0.2+7,混合模式) 这是我从Head-First Java书中编译的代码: 为什么那个特殊字符(%)会出现在字符串的末尾,我如何编写代码来去掉它?