为了实现扩充或扩展Web服务器的功能,ASP.NET提供了HttpHandler(HTTP处理程序)和HttpModule(HTTP模块),这里,笔者将带各位深入了解这些组件的详细信息。这篇文章,笔者将向大家实现一个提供安全服务的HTTP模块。
AD: Dynamic .NET TWAIN是一款用于.NET桌面应程序下的扫描控件,可以从任何兼容TWAIN的驱动获取图像,市面上少有的分发完全免费的扫描控件,控件中国网:023-6787 0900
实现一个提供安全服务的HTTP模块
现在们实现一个HTTP模块,它为们的Web应用程序提供安全服务。该HTTP模块基本上是提供一种定制的身份认证服务。它将接收HTTP请求中的身份凭证,并确定该凭证是否有效。如果有效,与用户相关的角色是什么?通过User.Identity对象,它把这些角色与访问们的Web应用程序页面的用户的标识关联起来。
下面是该HTTP模块的代码:
using System; using System.Web; using System.Security.Principal; namespace SecurityModules { /// Class1的总体描述。 public class CustomAuthenticationModule : IHttpModule { public CustomAuthenticationModule() { } public void Init(HttpApplication r_objApplication) { // 向Application 对象注册事件处理程序。 r_objApplication.AuthenticateRequest += new EventHandler(this.AuthenticateRequest) ; } public void Dispose() { // 此处空出,因为们不需要做什么操作。 } private void AuthenticateRequest(object r_objSender,EventArgs r_objEventArgs) { // 鉴别用户的凭证,并找出用户角色。。 1. HttpApplication objApp = (HttpApplication) r_objSender ; 2. HttpContext objContext = (HttpContext) objApp.Context ; 3. if ( (objApp.Request["userid"] == null) || 4. (objApp.Request["password"] == null) ) 5. { 6. objContext.Response.Write("<H1>Credentials not provided</H1>") ; 7. objContext.Response.End() ; 8. } 9. string userid = "" ; 10. userid = objApp.Request["userid"].ToString() ; 11. string password = "" ; 12. password = objApp.Request["password"].ToString() ; 13. string[] strRoles ; 14. strRoles = AuthenticateAndGetRoles(userid, password) ; 15. if ((strRoles == null) || (strRoles.GetLength(0) == 0)) 16. { 17. objContext.Response.Write("<H1>We are sorry but we could not find this user id and password in our database</H1>") ; 18. objApp.CompleteRequest() ; 19. } 20. GenericIdentity objIdentity = new GenericIdentity(userid, "CustomAuthentication") ; 21. objContext.User = new GenericPrincipal(objIdentity, strRoles) ; } private string[] AuthenticateAndGetRoles(string r_strUserID,string r_strPassword) { string[] strRoles = null ; if ((r_strUserID.Equals("Steve")) (r_strPassword.Equals("15seconds"))) { strRoles = new String[1] ; strRoles[0] = "Administrator" ; } else if ((r_strUserID.Equals("Mansoor")) (r_strPassword.Equals("mas"))) { strRoles = new string[1] ; strRoles[0] = "User" ; } return strRoles ; } } }
Dynamic .NET TWAIN是一款用于.NET桌面应程序下的扫描控件,可以从任何兼容TWAIN的驱动获取图像,市面上少有的分发完全免费的扫描控件,控件中国网:023-6787 0900