本文主要是介绍第四十八章 为 Web 应用程序实现 HTTP 身份验证 - 在处理请求之前在 CSP 中进行身份验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 第四十八章 为 Web 应用程序实现 HTTP 身份验证 - 在处理请求之前在 CSP 中进行身份验证
- 在处理请求之前在 `CSP` 中进行身份验证。
第四十八章 为 Web 应用程序实现 HTTP 身份验证 - 在处理请求之前在 CSP 中进行身份验证
在处理请求之前在 CSP
中进行身份验证。
这是在 IRIS
中实现 HTTP
身份验证的替代方法。它主要适用于在 Web
应用程序中的请求处理时执行身份验证会很困难或耗时的情况。
在该方法中,通过调用专用的认证类来对用户进行认证。 Web
网关在将原始请求分派至 IRIS
之前执行此检查。当身份验证类成功检查用户的详细信息后,Web
应用程序无需执行任何进一步的检查。
当然,此方法需要承担每个 Web
请求处理两个请求(发送至 IRIS
)的开销:一个用于身份验证,另一个用于实际处理对 CSP
资源的请求。
实现此身份验证方法所需的基本参数显示在以下 Apache
配置块 (httpd.conf
) 中:
<Location "/csp/samples/"> AuthType Basic AuthName "CSP samples" require valid-user AuthCSPEnable On AuthCSPClass /csp/samples/%CSP.HTTPAuthentication.cls AuthBasicAuthoritative Off
</Location>
参数AuthType
、AuthName
、require
和AuthCSPEnable
与方法(2
)相同。
附加的 AuthCSPClass
参数定义执行用户身份验证的类。该类必须继承 %CSP.Page
,并使用适当的 CGI
环境变量检查用户的登录详细信息,如果操作成功则返回 200 OK
响应标头,如果操作失败则返回 401 Authorization required
响应标头。
下面显示了一个简单的身份验证类,其中根据 %Users
文件中保存的记录检查用户登录详细信息:
Class %CSP.HTTPAuthentication Extends %CSP.Page
{ ClassMethod OnPreHTTP() As %Boolean { Set %response.ContentType = "text/html" Set %session.Preserve = 0 Quit 1 } ClassMethod OnPage() As %Status { Set crlf=$Char(13,10) Set type=%request.GetCgiEnv("AUTH_TYPE", "") Set user=%request.GetCgiEnv("REMOTE_USER", "") Set pwd=%request.GetCgiEnv("AUTH_PASSWORD", "") Set httpauth=%request.GetCgiEnv("HTTP_AUTHORIZATION", "")If httpauth'="" {Set type=$Piece(httpauth," ",1)Set user=$system.Encryption.Base64Decode($Piece(httpauth," ",2))Set pwd=$Piece(user,":",2)Set user=$Piece(user,":",1)}Set auth=0 If $ZConvert(type,"L")'="basic" Set auth=1 If auth=0,user'="",$Get(^%Users(user))=pwd Set auth=1 If auth=1 { Write "HTTP/1.1 200 OK"_crlf Write "Content-Type: text/html"_crlf Write "Content-Length: 0"_crlf Write "Connection: close"_crlf_crlf } Else { Write "HTTP/1.1 401 Authorization Required"_crlf Write "WWW-Authenticate: Basic realm=""CSP samples"""_crlf Write "Content-Type: text/html"_crlf Write "Content-Length: 0"_crlf Write "Connection: close"_crlf_crlf } Quit $$$OK } ClassMethod OnHTTPHeader(ByRef OutputBody As %Boolean) As %Status { Quit $$$OK }
}
对于方法 (1) 和 (3),可以使用 Apache ErrorDocument
指令为登录失败指定自定义错误页面。例如:
ErrorDocument /error/my_authentication_error.html
当然,对于方法 (2),错误消息的文本由 Web
应用程序控制。
这篇关于第四十八章 为 Web 应用程序实现 HTTP 身份验证 - 在处理请求之前在 CSP 中进行身份验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!