描述: | 允许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
。应用程序必须被定义为供应商类型authn
使用
AuthnzFcgiDefineProvider
,并启用
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
。该应用程序必须被定义为提供者类型AuthZ的使用
AuthnzFcgiDefineProvider
。调用时,应用程序应使用提供的用户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
没有被设置。该应用程序必须被定义为提供者类型authnz
使用
AuthnzFcgiDefineProvider
。该应用程序应使用用户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
。该应用程序必须被定义为提供者类型authn使用
AuthnzFcgiDefineProvider
。 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/在上指定authn提供程序
AuthBasicProvider
和上的authz提供程序
Require
:
AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthn Require FooAuthz
AUTHORIZER
角色(一次调用中的身份验证和授权者),则按以下方式定义一个提供程序:
AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/指定上都authnz提供商
AuthBasicProvider
和Require
:
AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthnz Require FooAuthnz
以下是当前尚未实现的潜在功能:
FCGI_APACHE_ROLE
to 的设置表示ACCESS_CHECKER
。fcgistarter
可以用来启动它们。
ProxyPass
与FastCGI响应器一起使用时。error
或更高级别。warn
。debug
。trace2
。REMOTE_PASSWD
变量的值
将被遮盖,但其他敏感数据将在日志中可见。trace5
。 所有敏感数据将在日志中可见。LogLevel
可用于配置特定于mod_authnz_fcgi的日志级别。例如:
LogLevel info authnz_fcgi:trace8
描述: | 使FastCGI应用程序能够处理check_authn身份验证挂钩。 |
---|---|
句法: | AuthnzFcgiCheckAuthnProvider provider-name| |
默认: | none |
内容: | 目录 |
状态: | 延期 |
模块: | mod_authnz_fcgi |
此伪指令用于使FastCGI授权者处理认证或授权的特定处理阶段。
FastCGI授权者的某些功能要求使用此伪指令而不是
AuthBasicProvider
:
UserExpr
下面的
选项
AuthnzFcgiDefineProvider
。None
None
在外部范围(例如,父目录)中禁用使用此伪指令启用的提供程序。UserExpr
配置并计算为空字符串(例如,授权者未返回变量)时,该值将用作用户ID。通常在授权者具有来宾或未经身份验证的概念时使用,并且用户和来宾用户被映射到某个特定用户ID以便进行日志记录和其他用途。Variable-XXX
UserExpr "%{reqenv:XXX}"
描述: | 将FastCGI应用程序定义为身份验证和/或授权的提供者 |
---|---|
句法: | AuthnzFcgiDefineProvider type provider-name
backend-address |
默认: | none |
内容: | 服务器配置 |
状态: | 延期 |
模块: | mod_authnz_fcgi |
此伪指令用于将FastCGI应用程序定义为特定阶段的身份验证或授权的提供程序。
AuthBasicProvider
和)中
Require
。fcgistarter
。