我已经开始维护一些使用openam SSO进行身份验证的网站。但是,当我们的一个用户设置一个持久性cookie(DProPCookie)时,它并不总是有效。在openam/opensso中使用persitent cookie时,SSO cookie不起作用
摄制的场景是:
- 登录openam,设置持续性的cookie
- 重新启动浏览器(以清晰的会话cookie)
- 进入站点A,用户登录时会自动持续性的cookie,因为
- 前往网站B,用户被呈现一个登录页面(他们应该自动登录)。
第3步后,如果我从我的浏览器删除iPlanetDirectoryPro cookie,我可以登录到站点B罚款(使用持久cookie)。看起来,设置DProPCookie时从站点A生成的iPlanetDirectoryPro cookie在站点B上不起作用。
请注意,我尝试过站点A和站点B的各种排列,并且场景在每种情况下都是相同的。
我对openam相当陌生,因此有关如何调试的提示很棒,或者如果我错过了某些明显出错的地方,请告诉我。
在此先感谢。
编辑:
我后来发现,iPlanetDirectoryPro cookie的使用DProPCookie工作不进行身份验证时返回。因此与跨域无关。
- 登录openam,设置持续性的cookie
- 重新启动浏览器(以清晰的会话cookie)
- 进入站点A,用户登录时会自动持续性的cookie,因为
- 删除除iPlanetDirectoryPro所有cookie饼干
- 刷新页面 - 要求登录
如果我重复测试,但与iPlanetDirectoryPro合作okie生成的正常登录然后当我刷新页面,我自动获得认证。 (我改变了问题的标题以反映这一点)。
进一步编辑:
止跌回升调试 - 我看到这个异常的日志:
IdName is :null
amAuth:11/28/2012 05:11:25:750 PM GMT: Thread[TP-Processor2,5,main]
orgName is :xxx
amAuth:11/28/2012 05:11:25:750 PM GMT: Thread[TP-Processor2,5,main]
AuthD.getIdentity() from IdUtils Name: null Org: xxx
amAuth:11/28/2012 05:11:25:750 PM GMT: Thread[TP-Processor2,5,main]
AuthD.getIdentity: Got IdRepoException while getting Identity from IdUtils: Illegal universal identifier null.
amAuth:11/28/2012 05:11:25:750 PM GMT: Thread[TP-Processor2,5,main]
isLockedOut:Exception :
java.lang.NullPointerException
at com.sun.identity.idm.server.IdCachedServicesImpl.search(IdCachedServicesImpl.java:585)
at com.sun.identity.idm.AMIdentityRepository.searchIdentities(AMIdentityRepository.java:296)
at com.sun.identity.authentication.service.AuthD.getIdentity(AuthD.java:1453)
at com.sun.identity.authentication.service.AMAccountLockout.isMemoryLockout(AMAccountLockout.java:297)
at com.sun.identity.authentication.service.AMAccountLockout.isLockedOut(AMAccountLockout.java:281)
at com.sun.identity.authentication.service.AMAccountLockout.isLockedOut(AMAccountLockout.java:264)
at com.sun.identity.authentication.service.AMLoginContext.processPCookieMode(AMLoginContext.java:1919)
at com.sun.identity.authentication.service.AMLoginContext.processIndexType(AMLoginContext.java:1846)
通过openam代码快速扫描 - 我们似乎没有在AMAccountLockout得到一个用户名在这里.java:264:
public boolean isLockedOut() {
// has this user been locked out.
String userDN = loginState.getUserToken();
return isLockedOut(userDN);
}
对于我来说看起来像一个bug,可能永久cookie在使用帐户锁定功能时也不能很好地工作。 –