我想要的是
由于各种原因,我希望看到以下身份验证程序起作用:
- 前往 moodle.blah.bla
- Apache 通过 mod_auth_cas 询问你的登录信息
- 一旦通过身份验证,Apache 会将您发送到 moodle.blah.bla/login/index.php?authCAS=CAS
- 然后,Moodle 将您发送到已经过身份验证的 CAS 服务器
- CAS 将您作为经过身份验证的用户发送回 moodle。
我拥有的
目前,我已确认 mod_auth_cas 确实验证了我的用户。我还使用其 CAS 插件成功验证了 Moodle。
问题
我遇到的困难是将这两件事放在一起。
首先,一旦 mod_auth_cas 对您进行身份验证,我不确定如何将用户发送到正确的 Moodle url。
其次,当我手动浏览到 Moodle CAS 身份验证链接时,它最终会将我送入重定向循环。
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.
铬:
ERR_TOO_MANY_REDIRECTS
我对这个问题的看法
对于第一个问题,我认为我只希望在设置特定标头时进行重定向。但我认为标头会一直存在直到会话结束,从而触发每个页面的重定向...
对于第二个问题,mod_auth_cas 的票证是否已失效,因此 apache 试图将我送回 cas 服务器?即使我们刚从那里过来……这将是一个重定向循环。
关于如何让他工作还有其他建议吗?
服务器配置和规格
我的服务器正在运行:
- Ubuntu 14.04
- Apache 2.4
- http://packages.ubuntu.com/trusty/libapache2-mod-auth-cas
- Moodle 2.8+
在我的虚拟主机中:
CASValidateServer Off
CASLoginURL https://casserver/cas/login
CASValidateURL https://casserver/cas/serviceValidate
<LocationMatch "/.*">
AuthType CAS
require valid-user
</LocationMatch>
Moodle 配置为使用 CAS 2.0。
CAS 服务器正在运行 4.x。
答案1
不要再尝试将 mod_auth_cas 与 Moodle 结合使用。请单独使用 Moodle 中的 CAS 插件。
为什么要将这两件事放在一起? Moodle 自己的 CAS 插件本身就足够了。
我认为,当您拥有 mod_auth_cas 和 Moodle 的 CAS 时,CAS 参数会被 mod_auth_cas 使用,而这些参数要么对 Moodle 的 CAS 不可用,要么已经被 mod_auth_cas 使用。由于 CAS 令牌是一次性使用的,因此无论哪种情况都意味着 Moodle 的 CAS 无法正常工作。
如果您可以禁用 mod_auth_cas /login/index.php?authCAS=CAS.*
,您也许能够让其工作。不过,让它<LocationMatch ...>
匹配除相关 moodle AuthCAS=CAS
URL 之外的所有内容有点超出我现在想要弄清楚的范围。
另一种可能性是CASGateway /login/
告诉 mod_auth_cas 允许匿名访问 /login/ 目录(这样 Moodle 的 CAS 就可以接管那里)。我认为这是通过目录而不是 URL 来实现的,但如果这样可行,您可以尝试CASGateway /login/index.php?authCAS=CAS
进一步限制它。
答案2
您可以检查 mod_lua,因为它允许使用 lua 语言编写登录钩子。这可能会让您以编程方式添加缺少的内容。