2

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

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

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

我在这里找到了 PHP 的实现。随附的操作指南提供了一个很好的高级概念,说明协商身份验证应该如何工作,以及如何在 Web 应用程序中使用为 Perl(或任何语言)编写的协商身份验证库。理想情况下,我想使用一个与这个 PHP 具有类似接口的 Perl 库。

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

4

2 回答 2

0

mod_auth_kerb或从服务器环境中mod_auth_spnego读取。REMOTE_USER你完成了。

于 2012-12-14T22:28:39.753 回答
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),但由于我的应用程序没有任何严格的性能要求,它应该足够了。

于 2012-12-17T15:55:40.577 回答