Apache 如何将数据从mod auth外部验证器传播到服务页面

Apache 如何将数据从mod auth外部验证器传播到服务页面,apache,http-status-code-401,pam,mod-auth-external,Apache,Http Status Code 401,Pam,Mod Auth External,背景 在我们的Apache配置中,我们使用(前面提到的)调用PAM身份验证 现在需要正确处理基于阴影的密码过期: 如果密码在警告期之前,Apache应以HTTP状态代码200响应。这里没什么新鲜事 如果密码处于警告期内(其有效期接近尾声),Apache应以HTTP状态代码200响应,但应以某种方式包含有关警告期的信息 若密码处于过期期(它不再有效,但用户仍可以自行更改),Apache应以HTTP状态代码401响应,并以某种方式包含有关过期期的信息 如果密码超过了有效期(不再有效且帐户已锁定,管理

背景

在我们的Apache配置中,我们使用(前面提到的)调用PAM身份验证

现在需要正确处理基于阴影的密码过期:

  • 如果密码在警告期之前,Apache应以HTTP状态代码200响应。这里没什么新鲜事
  • 如果密码处于警告期内(其有效期接近尾声),Apache应以HTTP状态代码200响应,但应以某种方式包含有关警告期的信息
  • 若密码处于过期期(它不再有效,但用户仍可以自行更改),Apache应以HTTP状态代码401响应,并以某种方式包含有关过期期的信息
  • 如果密码超过了有效期(不再有效且帐户已锁定,管理员必须解锁),Apache应以HTTP状态代码401响应,并以某种方式包含有关锁定状态的信息
  • (也有缺页或其他错误的角落案例。不清楚该怎么办。但解决上述问题似乎也能解决这些角落案例。)

    我们的PAM验证器(通过使用)能够通过调整返回值来区分这些情况。我们已经有了

    然而,问题是如何从验证器获取信息到为页面服务的关联操作(包含200状态代码的实际页面或401错误文档)

    当前调查

    应注意的是,要求2与要求3和4之间存在显著差异

    需求3和需求4本身就比较容易,因为它们都涉及验证器返回错误(拒绝访问)。所以我们只需要知道如何在401错误页面中获取错误代码。我甚至在那一页上看到过

    要求2要困难得多。在这种情况下,我们的验证器必须返回0(已授予访问权限),并且仍然以某种方式将有关警告的信息传播到最终得到服务的对象

    日志解析

    显然(也是丑陋的)想法是解析日志。上的描述提到验证器返回值被写入Apache系统日志。此外,身份验证器打印到标准错误流的内容也会被记录下来

    这可用于将信息从验证器传递到其他一些实体

    这里的困难在于不清楚如何安全地进行。打印什么以确保“其他实体”将正确匹配当前请求和日志条目。仅仅URL似乎是不够的,因为同一个URL可以同时有多个请求。虽然我看不到验证器得到什么更有用

    这里的另一个问题是,为了能够解析日志,您必须为“其他实体”运行一些非平凡的代码。这使事情更加复杂,因为我们应该怎么做

    另一个想法

    如果我们能让验证器以某种方式修改“请求会话”(或者其他什么,可能只是环境?——我不知道,我是Apache新手)来向其中添加任意数据,我们(几乎)就到家了

    我们的验证器将以某种方式存储“密码状态”,也可能存储到警告/过期期结束前的剩余天数(如果适用)。然后在提供401错误页面时,我们将检索该页面并使用它动态生成页面内容

    或者更好的是,我们将它存储在会话中,以便另一端可以直接读取数据。(适用于不只是显示页面的浏览器的情况。)

    但到目前为止,我不知道如何做到这一点



    你知道如何满足这些要求吗?

    一个多月来,我一直没有得到答案。也不是我为之打开的

    因此,我结束了对我们的
    mod auth external
    的自定义修改。我不喜欢修改第三方软件,但这一个似乎已经死了。而且事实证明我们使用的是非常旧的版本(2.2.9,我升级到了2.2.11,是2.2.x系列中的最后一个)。它已经有了一些定制

    我在给我的同事的评论中解释了解决方案的细节,所以我不会在这里重复

    不过,我将对影子细节进行评论,因为那里没有提到这些细节


    我有两种选择:要么使用函数检索阴影数据,要么解析PAM生成的消息。第一次尝试基于函数,但最后我使用了PAM消息。我没有足够的理由去做这些。然而,我决定在HTTP响应中传播,不仅是影子状态,还传播生成的任何PAM消息,因此这样做似乎更容易。

    一个多月来,我在这里没有得到任何答案。也不是我为之打开的

    因此,我结束了对我们的
    mod auth external
    的自定义修改。我不喜欢修改第三方软件,但这一个似乎已经死了。而且事实证明我们使用的是非常旧的版本(2.2.9,我升级到了2.2.11,是2.2.x系列中的最后一个)。它已经有了一些定制

    我在给我的同事的评论中解释了解决方案的细节,所以我不会在这里重复

    不过,我将对影子细节进行评论,因为那里没有提到这些细节


    我有两种选择:要么使用函数检索阴影数据,要么解析PAM生成的消息。第一次尝试基于函数,但最后我使用了PAM消息。我没有足够的理由去做这些。然而,我决定在HTTP响应中不仅传播影子状态,而且传播生成的任何PAM消息,这样看起来更容易理解。

    您似乎对这件事有点生气。:)你最终给github repo添加了补丁吗?@Maxbarras我没有。我会尝试一次,我会有机会的。@DavidHayes遗憾的是没有。我试图发布更改,但是
    mod auth external
    更改了