文档:ModAuthTicket¶
模块: mod_auth_ticket
描述¶
mod_auth_ticket是一个认证模块,它提供基于外部登录方案(OpenID、SAML、OAuth等)的服务器级别保护。这在以下情况下很有用:
提供单点登录功能,保护多个Web应用程序(每个Web应用程序都
不需要支持此功能 - 甚至静态内容也可以受到保护)。
此模块将未经认证的访问重定向到指定的外部页面,并让该页面通过使用签名/加密的cookie将认证信息注入回模块。
安装¶
已弃用 mod_auth_ticket 有严重限制,详情请参阅 mod_auth_ticket README。更好的选择是 mod_authn_ticket
mod_auth_ticket 是一个第三方模块,未包含在官方发行版中。重申,应该优先选择 mod_authn_ticket 而不是 mod_auth_ticket。
标准 lighttpd 模块构建过程有效,但我提供了一个需要一些编辑的 Makefile,
对于习惯的人来说可能更简单。在构建之前,你需要将 lighttpd 源代码解压到某个位置。
选项¶
历史(旧)手册可从以下地址获取:https://github.com/tai/mod-auth-ticket-for-lighttpd/wiki/Manpage
auth-ticket.name = "cookiename" - 必需
要使用的 Cookie 名称。此 Cookie 首先由“authurl”页面创建,然后重定向回 MAT 以通知 SSO 认证结果。
auth-ticket.key = "secret-password" - 必需
用于在“authurl”页面和 MAT 之间加密/解密/签名/验证 Cookie 数据的密钥。任何长度的任何字符串都可以。
对于实际使用的加密/签名方案,您可以在“authurl”页面中选择(有几种 Cookie 格式可供选择生成)。
auth-ticket.override = [012] - 必需,默认为 2
控制如何处理浏览器提供的认证信息。有 3 种情况
情况 1: auth-ticket.overide = 0
- 如果由浏览器提供,则使用“Authorization:”头而不是 MAT Cookie。
- 用例:如果您使用(本地提供的)BasicAuth 和(外部提供的)SSO 对您的站点进行双重保护,您可以通过指定此模式来赋予 BasicAuth 更高的优先级。
情况 2: auth-ticket.override = 1
- 也是双重保护模式,但赋予 MAT Cookie 更高的优先级。
情况 3: auth-ticket.override = 2
- 这是 MAT-only 模式。传入的“Authorization:”头将被忽略,即使 MAT 认证失败也不会回退到 BasicAuth。这是推荐的默认设置。
auth-ticket.authurl = "url-in-case-of-authfail" - 可选,默认为空
认证失败时的重定向 URL。
此页面需要作为 MAT 和您选择的 SSO 方案之间的桥梁,因此您需要将自定义页面放置到此 URL。有关此类页面的示例,请参阅 demo/ 文件夹下的文件。
如果未指定此页面,则不会发生重定向。这与允许匿名访问相同,这在某些用例(如半公开维基)中很有用。
auth-ticket.timeout = <seconds> - 可选,默认为 86400
设置签发票据的生命周期。
请注意,由“authurl”页面签发的 Cookie 仅使用一次,并立即
被 MAT 签发的票据(=随机生成的令牌)替换。此参数
指定 MAT 签发票据的生命周期。
auth-cookie.options = "any=cookie; parameter" - 可选,默认为空
您希望包含在 Cookie 中的任何其他选项。
auth-ticket.loglevel = [0-4] - 可选,默认为 1 (ERROR)
设置日志级别。当前支持的级别有:0 (FATAL), 1(ERROR), 2(WARN), 3(INFO), 4(DEBUG)。如果将其设置为 DEBUG,某些敏感信息(用户名、签发令牌)将被记录(但密码不会被记录 - 无论如何都无法记录)。
示例¶
server.modules += ("mod_auth_ticket") $HTTP["url"] =~ "^/demo/passwd\.protected" { auth-ticket.override = 2 auth-ticket.timeout = 86400 auth-ticket.key = "sharedsecret.passwd" auth-ticket.name = "AuthByPasswd" auth-ticket.options = "path=/; httponly;" auth-ticket.authurl = "/demo/passwd/login.php" }