Apache HTTP 伺服器版本 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://127.0.0.1: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://127.0.0.1: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://127.0.0.1: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://127.0.0.1:10103/ <Location "/protected/"> AuthType ... AuthName ... AuthnzFcgiCheckAuthnProvider FooAuthn \ Authoritative On \ RequireBasicAuth Off \ UserExpr "%{reqenv:REMOTE_USER}" Require ... </Location>
AUTHENTICATOR
和 AUTHORIZER
),請將不同的提供者定義如下,即使他們對應到同一個應用程式AuthnzFcgiDefineProvider authn FooAuthn fcgi://127.0.0.1:10102/ AuthnzFcgiDefineProvider authz FooAuthz fcgi://127.0.0.1:10102/在
AuthBasicProvider
中指定 authn 提供者,在 Require
中指定 authz 提供者AuthType Basic AuthName "Restricted" AuthBasicProvider FooAuthn Require FooAuthz
AUTHORIZER
角色(在一次呼叫中進行身分驗證和授權),請將單一提供者定義如下AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://127.0.0.1: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 提供者名稱| |
預設值 | none |
內容 | 目錄 |
狀態 | 外掛程式 |
模組 | mod_authnz_fcgi |
此指令用於讓 FastCGI 授權工具處理驗證或授權的特定處理階段。
FastCGI 核准模組需要在指令中啟用一些功能,而非使用 AuthBasicProvider
UserExpr
選項 AuthnzFcgiDefineProvider
定義的提供者名稱無
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
程式。