mod_perl 基本身份验证,$r->user() 失败

发布于 2024-12-03 21:33:10 字数 606 浏览 1 评论 0原文

我们有一个使用 mod_perl2 和 mason 的项目。

我面临的问题是使用 .htaccess 中的 apache basic auth 对用户进行身份验证。

在cgi环境中我可以从$ENV{REMOTE_USER}获取它

在mod_perl中我应该能够使用$r->user()获取它,不幸的是返回undef 。

$r->connection->user() 也没有运气

我也尝试过 CGI::Apache2::Wrapper$cgi-> ;remote_user()$cgi->user_name() 再次没有运气。

它工作的唯一方法是调用 $r->headers_in->get('Authorization') ,它返回类似以下内容:'Basic dGhlZHJpdmVyaXM6eGVudXByZQ=='

任何想法为什么$r->user() 失败? 谢谢

We have a project that uses mod_perl2 and mason.

The problem I'm facing is getting the user authenticated using apache basic auth, from .htaccess .

In cgi enviroment I can get that from $ENV{REMOTE_USER}

In mod_perl I should be able to get it using $r->user(), which unfortunately returns undef.

Also no luck with $r->connection->user()

I've also tried CGI::Apache2::Wrapper, $cgi->remote_user() and $cgi->user_name() again with no luck.

The only way it works is calling $r->headers_in->get('Authorization') which returns something like: 'Basic dGhlZHJpdmVyaXM6eGVudXByZQ=='

Any ideea why $r->user() fails?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

允世 2024-12-10 21:33:10

我怀疑 $r->user() 仅在 mod_perl2 进行身份验证时设置,而不是在 apache 进行身份验证时设置。

尝试

my ($res, $sent_pw) = $r->get_basic_auth_pw;

在对 $r->user() 的调用上方添加:。这可能会触发模块解码授权标头。

或者,您可以手动对授权标头进行 base64 dcode:

my $auth = $r->headers_in->get('Authorization');
my $username = (split(/:/,APR::Base64::decode((split(/ /,$auth))[1])))[0];

I suspect that $r->user() is only set when mod_perl2 does the authentication, not when apache does it.

Try adding:

my ($res, $sent_pw) = $r->get_basic_auth_pw;

above the call to $r->user(). This might trigger the module to decode the Authorization header.

or, you could manually base64 dcode the Authorization header:

my $auth = $r->headers_in->get('Authorization');
my $username = (split(/:/,APR::Base64::decode((split(/ /,$auth))[1])))[0];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文