【发布时间】:2017-01-24 04:08:00
【问题描述】:
我正在为 apache 使用 OpenAM 13 和 Web Policy Agent 4.0。
Web Policy Agent 似乎无法识别 iPlanetDirectoryPro cookie,该 cookie 是 OpenAM 在身份验证后设置的令牌,已过期或实际上是无效的。
看起来 Web Policy Agent 会获取令牌并通过 OpenAM 确认,然后被告知验证失败,如下面的这些日志行,并给用户一个 403 禁止页面。
2017-01-24 11:29:55.475 +0800 WARNING [0x7f180e887700:17669] am_get_session_policy_cache_entry(): failed to locate data for a key (AQIC5wM2LY4SfcxFG6Bl98dRT7AluZ7682rulJGU8-CCSN4.*AAJTSQACMDEAAlNLABQtMTQ2NTcwMTgyOTEwMjQ5MTg4OQACUzEAAA..*)
2017-01-24 11:29:55.484 +0800 WARNING [0x7f180e887700:17669] validate_policy(): retry 0 (remote session/policy call failure: error)
2017-01-24 11:29:57.490 +0800 WARNING [0x7f180e887700:17669] validate_policy(): retry 1 (remote session/policy call failure: error)
2017-01-24 11:29:59.497 +0800 WARNING [0x7f180e887700:17669] validate_policy(): retry 2 (remote session/policy call failure: error)
2017-01-24 11:30:01.504 +0800 WARNING [0x7f180e887700:17669] validate_policy(): retry 3 (remote session/policy call failure: error)
2017-01-24 11:30:03.504 +0800 ERROR [0x7f180e887700:17669] validate_policy(): remote session/policy call to validate 'http://agent.job.com.tw:80/notification/push' failed (max 3 retries exhausted)
这种情况下的预期行为是将用户重定向到身份验证,我认为是这样,如果用户有效并且无权访问该页面,则会指示代理阻止用户进入该页面,如下面的这个.
2017-01-24 11:43:59.009 +0800 WARNING [0x7f17f9ff3700:17669] am_get_session_policy_cache_entry(): failed to locate data for a key (AQIC5wM2LY4Sfcz6gBnS77c_KhZogqv6gYGQdjU1WpRaQxE.*AAJTSQACMDEAAlNLABMzMTYxMjIwNDAzNjc4NDA4MDQxAAJTMQAA*)
2017-01-24 11:43:59.050 +0800 WARNING [0x7f17f9ff3700:17669] validate_policy(): decision: deny, reason: no action decisions found
2017-01-24 11:43:59.213 +0800 WARNING [0x7f180d000700:17669] validate_policy(): validate policy did not find a match for 'http://agent.job.com.tw:80/favicon.ico' in the cached entries, retrying with the new request to the policy service
2017-01-24 11:43:59.227 +0800 WARNING [0x7f180d000700:17669] validate_policy(): decision: deny, reason: no action decisions found
但是,如果我自己导航到 OpenAM 服务器页面,无论在访问资源页面之前或之后返回 403 页面,OpenAM 都会要求我进行身份验证!换句话说,登录时,iPlanetDirectoryPro cookie 消失了,我猜它被 OpenAM 清除了,所以这意味着 OpenAM 能够区分过期会话,或者至少,它知道如何采取处理不再有效的 iPlanetDirectoryPro cookie。
如果我选择不立即登录并返回资源页面,它会开始重定向到 OpenAM 进行身份验证,这很好。获取 403 页面时,手动删除 iPlanetDirectoryPro cookie 会达到同样的效果。
这真的很烦人,对于普通用户来说可能很关键,他们不会意识到要执行上述解决方法。
希望有人能帮我解决这个问题,非常感谢。
【问题讨论】:
-
一般来说这是可行的,所以您的部署似乎存在特定问题。在代理 4 中,SSOToken 的缓存发生了变化。只要在 OpenAM 服务器端配置了“maxCachingTime”,它就会被缓存。当 SSO 会话超时并且代理配置为通知模式时,OpenAM 还会向代理发送通知以清理缓存。
-
抱歉回复晚了,我的测试环境也遇到了这个问题,一个 Ubuntu 虚拟机只能按照Getting Started With OpenAM 和OpenAM Web Policy Agent Release Notes 中的步骤进行配置。您提到的 maxCachingTime 选项默认为 3 分钟,我尝试将其更改为 0 但问题仍然存在。感谢您的帮助。
标签: single-sign-on openam