如何使用Perl提供Kerberos协商身份验证HTTP服务器端

时间:2012-12-14 21:59:44

标签: perl http webserver kerberos

我正在尝试编写一个基于Perl的Web应用程序,它使用Kerberos 5协商身份验证来验证其用户。我正在使用的Perl Web框架是Perl Dancer,它的非CGI,自包含操作模式。我在Linux的Fedora发行版上运行它。

协商身份验证可以使用从用户浏览器转发的现有Kerberos票证,或使用常规基本身份验证允许用户建立他们的第一个Kerberos票证。最终结果是支持协商身份验证的站点无缝集成到SSO环境中。

CPAN有Authen :: Krb5模块,我怀疑它是提供协商认证的基础,但我只能在CPAN上找到客户端模块。这些客户端模块可用作真正简单的基本身份验证的后端,或用于建立第一个协商身份验证票证,但不能自行执行协商身份验证(例如,Authen :: Krb5 :: Easy)。

我找到了PHP here的实现。随附的how to guide提供了关于协商身份验证应如何工作的高级概念,以及如何在Web应用程序中使用为Perl(或任何语言)编写的协商身份验证库。理想情况下,我想使用一个与这个PHP类似的接口的Perl库。

是否存在Perl协商身份验证服务器端库? 如果不存在,最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

mod_auth_kerbmod_auth_spnego并从服务器环境中读取REMOTE_USER。你已经完成了。

答案 1 :(得分:0)

我做了一些搜索,基本上所有实现Negotiate / SPENGO / RFC4559服务器端的库都是用C语言编写的,通常基于Apache的mod_auth_kerb。

虽然没有Perl库浮出水面,但我找到了一个用于Python 2的文件,名为PyKerberos。它似乎在源代码中得到了很好的解释(其他库中严重缺乏的东西),作为奖励,似乎这个Python 2模块可以从发行版包存储库(Fedora中的python-kerberos)中广泛使用。

目前,我的问题的最佳答案似乎是通过Perl的Inline :: Python模块从Perl调用PyKerberos。这个解决方案可能很慢(Perl - > Python - > C),但由于我的应用程序没有任何严格的性能要求,所以它应该足够了。