Apache2 - 与mod_auth_kerb合作以实现"don't require logging in, but allow it"



我已经搜索了几天,在mod_auth_kerb源中戳了几天,并进行了很多实验,因此无济于事,所以我真的希望有人可以指向正确的方向。在这个...

我已经与Apache :: Authcookie(在Apache 1.x和Apache 2.x(2.2.x)(主要是2.2.x)上工作了多年),最近使用Authcookie开发了单个登录解决方案(仅此一次)和mod_auth_pubtkt用于针对AD后端的身份验证(在LDAP上)。一切都很好,现在我正在考虑将kerberos添加到启动网络浏览器之前登录到广告域的Windows用户中。这是在工作(为我的单个Signon服务器生成的KeyTab,现在可以通过用户的浏览器和Apache验证Kerberos门票),但我需要使其可选。也就是说,我需要设置Apache 2.2.x,以便如果没有Kerberos标头要检查,则没有创建的错误或挑战(例如,我不想要的凭据提示)。<<<<<<<</p>

在我的SSO CGI代码中,我基本上想查看$ env {remote_user}是否填充了(由mod_auth_kerb),并相应地采取行动,如果不是这样,请做我现在做的事情(询问用户的以形式的信用,向LDAP服务器进行验证,然后以这种方式继续)。

我认为这会起作用:

<Location /whatever>
   AuthName DualExp
   AuthType Kerberos
   KrbAuthRealms mumble
   KrbServiceName HTTP/mumble@blah
   Krb5Keytab /etc/apache2/my.krb5tab
   KrbMethodNegotiate on
   KrbMethodK5Passwd off
   KrbLocalUserMapping on
   KrbAuthoritative off
   require valid-user
   AuthType Site::NullAuth
   PerlAuthenHandler Site::NullAuth->always
</Location>

wery site :: nullauth是一个非常简单的mod_perl authen处理程序,始终返回" ok"。

随着mod_auth_kerb的" krbauthoritative"设置为"关闭",它看起来像是网站:: nullauth一直被调用,而不仅仅是失败(即。如果MOD_AUTH_KERB在成功方面设置的用户似乎不可用:: Nullauth。由于Nullauth被最后打电话给我,因此我最终没有用户集。或者至少我认为正在发生的事情。在Nullauth中,我正在这样做以检查用户:

sub always {
   my ($auth_type, $r) = @_;
   my $auth_user = $r->user;
   my $prev_user = "";
   $prev_user = $r->prev->user if $r->prev;
   $r->server->log_error("user authenticated as $auth_user and prev is $prev_user");
   return OK;
}

,对于$ r->用户或$ r-> prev->用户看不到任何东西。

有人还有我可以在这里尝试的其他任何东西吗?

谢谢,

... Steve

spnego与浏览器的互动以这种方式工作:

  1. 未经认可的用户的请求,没有会话cookie
  2. 服务器代码要求使用401响应和" www-authentication:谈判"响应标题
  3. 进行Kerberos身份验证
  4. 浏览器通过服务主名称的服务票来回答该回复

通常,浏览器试图从系统中获取用户的Kerberos令牌,如果没有获得凭据,请提示创建一个凭据 - 首先创建一个TGT,然后要求SPN Ticket to Kerberos Server。

结果,您无法避免浏览器的凭据提示对话框,因为如果浏览器支持Kerberos/Spnego身份验证,则代码将无法获取信息,然后再触发身份验证过程本身。

顺便说一句,如果Spnego身份验证失败(用户确实取消了凭据提示),则您的代码可以通过简单的cookie跟踪来退缩到另一个身份验证。

没有简单的方法可以使它与之搭配。我最终要做的是使用mod_rewrite筛选所有来自现场的IE客户端,只希望所有本地IE客户端都有门票。RFC 1918地址用于隐藏我们的真实地址。

# Add a rewrite rule for offsite hosts
RewriteEngine On
RewriteLog /etc/httpd/logs/ssl_rewrite_log
RewriteLogLevel 2
# IE fails hard if the user does not have a tgt for SPNEGO
# and either attempts NTLM or fails altogether depending on
# exact version. Redirect all "offsite" login attempts to
# form rather than attempt pass-thru SPNEGO login.
RewriteCond   %{HTTP_USER_AGENT}           ^Mozilla.*MSIE
RewriteCond   %{REMOTE_ADDR}          !^172.16..*$
RewriteRule   ^/login/          /login-simple/   [PT]

最新更新