首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenAM / OpenSSO HttpServletRequest.login(用户,pass)使用“无效传输字符串”失败。这是什么意思?

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

Stack Overflow用户
提问于 2014-01-29 19:44:42
回答 2查看 1.1K关注 0票数 0

我有两个tomcat服务器,一个带有OpenAM 12,一个带有主web应用程序。已知: HTML在没有问题的情况下进行身份验证,使用OpenAM java的编程登录可以从servlet中运行。

失败的是调用HttpServletRequest.login(username,(密码)

这是我在TomEE+服务器中拥有的条目:

代码语言:javascript
复制
    <Realm className="com.sun.identity.agents.tomcat.v6.AmTomcatRealm" debug="99"/>

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

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-03 13:23:15

对于用户名/密码组合,request#login失败,因为代理在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集成,而不需要了解任何有关专有传输字符串格式的信息。

票数 2
EN

Stack Overflow用户

发布于 2014-01-31 08:28:02

对于AgentRealm,“密码”不是密码,而是来自SSO会话的SSOTokenId。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21441024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档