Apache HTTP Server 版本 2.4
描述 | 允许 FastCGI 授权应用程序处理 Apache httpd 身份验证和授权 |
---|---|
状态 | 扩展 |
模块标识符 | authnz_fcgi_module |
源文件 | mod_authnz_fcgi.c |
兼容性 | 在版本 2.4.10 及更高版本中可用 |
此模块允许 FastCGI 授权应用程序对用户进行身份验证并授权访问资源。它支持通用 FastCGI 授权程序,这些授权程序参与身份验证和授权的单一阶段,以及 Apache httpd 特定的身份验证程序和授权程序,这些程序参与一个或两个阶段。
FastCGI 授权程序可以使用用户 ID 和密码进行身份验证,例如用于基本身份验证,或者可以使用任意机制进行身份验证。
此模块支持的 FastCGI 授权程序的调用模式由两个特征区分,类型和身份验证机制。
类型只是用于身份验证的authn
,用于授权的authz
,或者用于组合身份验证和授权的authnz
。
身份验证机制是指 Apache httpd 配置机制和处理阶段,可以是AuthBasicProvider
、Require
或check_user_id
。前两个对应于用于启用参与相应处理阶段的指令。
每种模式的描述
authn
,机制AuthBasicProvider
FCGI_ROLE
设置为AUTHORIZER
,FCGI_APACHE_ROLE
设置为AUTHENTICATOR
。应用程序必须使用AuthnzFcgiDefineProvider
定义为提供程序类型authn,并使用AuthBasicProvider
启用。调用时,应用程序应使用提供的用户 ID 和密码对客户端进行身份验证。示例应用程序#!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while ($request->Accept() >= 0) { die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR"; die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER"; die if !$ENV{'REMOTE_PASSWD'}; die if !$ENV{'REMOTE_USER'}; print STDERR "This text is written to the web server error log.\n"; if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") && $ENV{'REMOTE_PASSWD'} eq "bar" ) { print "Status: 200\n"; print "Variable-AUTHN_1: authn_01\n"; print "Variable-AUTHN_2: authn_02\n"; print "\n"; } else { print "Status: 401\n\n"; } }示例配置
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/ <Location "/protected/"> AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthn Require ... </Location>
authz
,机制Require
FCGI_ROLE
设置为AUTHORIZER
,FCGI_APACHE_ROLE
设置为AUTHORIZER
。应用程序必须使用AuthnzFcgiDefineProvider
定义为提供程序类型authz。调用时,应用程序应使用提供的用户 ID 和其他请求数据对客户端进行授权。示例应用程序#!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while ($request->Accept() >= 0) { die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHORIZER"; die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER"; die if $ENV{'REMOTE_PASSWD'}; print STDERR "This text is written to the web server error log.\n"; if ($ENV{'REMOTE_USER'} eq "foo1") { print "Status: 200\n"; print "Variable-AUTHZ_1: authz_01\n"; print "Variable-AUTHZ_2: authz_02\n"; print "\n"; } else { print "Status: 403\n\n"; } }示例配置
AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10103/ <Location "/protected/"> AuthType ... AuthName ... AuthBasicProvider ... Require FooAuthz </Location>
authnz
,机制AuthBasicProvider
+ Require
AUTHORIZER
协议,FCGI_ROLE
设置为AUTHORIZER
,FCGI_APACHE_ROLE
未设置。应用程序必须使用AuthnzFcgiDefineProvider
定义为提供程序类型authnz。应用程序应在同一调用中使用用户 ID、密码和其他请求数据处理身份验证和授权。调用发生在 Apache httpd API 身份验证阶段。如果应用程序返回 200 并且在授权阶段(通过Require
)调用了相同的提供程序,mod_authnz_fcgi 将在不调用应用程序的情况下返回授权阶段的成功。示例应用程序#!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while ($request->Accept() >= 0) { die if $ENV{'FCGI_APACHE_ROLE'}; die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER"; die if !$ENV{'REMOTE_PASSWD'}; die if !$ENV{'REMOTE_USER'}; print STDERR "This text is written to the web server error log.\n"; if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") && $ENV{'REMOTE_PASSWD'} eq "bar" && $ENV{'REQUEST_URI'} =~ m%/bar/.*%) { print "Status: 200\n"; print "Variable-AUTHNZ_1: authnz_01\n"; print "Variable-AUTHNZ_2: authnz_02\n"; print "\n"; } else { print "Status: 401\n\n"; } }示例配置
AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/ <Location "/protected/"> AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthnz Require FooAuthnz </Location>
authn
,机制check_user_id
FCGI_ROLE
设置为AUTHORIZER
,FCGI_APACHE_ROLE
设置为AUTHENTICATOR
。应用程序必须使用AuthnzFcgiDefineProvider
定义为提供程序类型authn。AuthnzFcgiCheckAuthnProvider
指定何时调用它。示例应用程序#!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while ($request->Accept() >= 0) { die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR"; die if $ENV{'FCGI_ROLE'} ne "AUTHORIZER"; # This authorizer assumes that the RequireBasicAuth option of # AuthnzFcgiCheckAuthnProvider is On: die if !$ENV{'REMOTE_PASSWD'}; die if !$ENV{'REMOTE_USER'}; print STDERR "This text is written to the web server error log.\n"; if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") && $ENV{'REMOTE_PASSWD'} eq "bar" ) { print "Status: 200\n"; print "Variable-AUTHNZ_1: authnz_01\n"; print "Variable-AUTHNZ_2: authnz_02\n"; print "\n"; } else { print "Status: 401\n\n"; # If a response body is written here, it will be returned to # the client. } }示例配置
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10103/ <Location "/protected/"> AuthType ... AuthName ... AuthnzFcgiCheckAuthnProvider FooAuthn \ Authoritative On \ RequireBasicAuth Off \ UserExpr "%{reqenv:REMOTE_USER}" Require ... </Location>
AUTHENTICATOR
和AUTHORIZER
),请定义单独的提供程序,如下所示,即使它们映射到同一个应用程序AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/ AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10102/在
AuthBasicProvider
上指定 authn 提供程序,在Require
上指定 authz 提供程序AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthn Require FooAuthz
AUTHORIZER
角色(在一个调用中进行身份验证和授权),请定义一个提供程序,如下所示AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/在
AuthBasicProvider
和Require
上都指定 authnz 提供程序AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthnz Require FooAuthnz
以下是目前未实现的潜在功能
FCGI_APACHE_ROLE
设置为ACCESS_CHECKER
来表示。fcgistarter
启动它们。ProxyPass
。error
及更高级别。warn
。debug
。trace2
。REMOTE_PASSWD
变量的值将被隐藏,但任何其他敏感数据都将在日志中可见。trace5
。所有敏感数据都将在日志中可见。LogLevel
可用于配置特定于 mod_authnz_fcgi 的日志级别。例如
LogLevel info authnz_fcgi:trace8
描述 | 启用 FastCGI 应用程序处理 check_authn 身份验证钩子。 |
---|---|
语法 | AuthnzFcgiCheckAuthnProvider provider-name| |
默认值 | none |
上下文 | directory |
状态 | 扩展 |
模块 | mod_authnz_fcgi |
此指令用于启用 FastCGI 授权程序以处理身份验证或授权的特定处理阶段。
FastCGI 授权程序的一些功能需要使用此指令而不是AuthBasicProvider
来启用
UserExpr
选项AuthnzFcgiDefineProvider
定义的提供程序的名称。None
None
以禁用在外部范围(例如在父目录中)使用此指令启用的提供程序。UserExpr
已配置并评估为空字符串(例如,授权程序未返回变量)时,此值将用作用户 ID。这通常用于授权程序具有访客或未经身份验证的用户的概念,并且访客用户映射到某些特定用户 ID 以用于日志记录和其他目的。UserExpr "%{reqenv:XXX}"
的选项引用授权程序返回的Variable-XXX
设置。如果指定了此选项,并且在成功身份验证后无法使用表达式检索用户 ID,则请求将被拒绝,并返回 500 错误。描述 | 将 FastCGI 应用程序定义为身份验证和/或授权的提供程序 |
---|---|
语法 | AuthnzFcgiDefineProvider type provider-name backend-address |
默认值 | none |
上下文 | 服务器配置 |
状态 | 扩展 |
模块 | mod_authnz_fcgi |
此指令用于将 FastCGI 应用程序定义为特定身份验证或授权阶段的提供程序。
AuthBasicProvider
和Require
)中使用。fcgistarter
。