实现一个提供安全服务的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 ;
- }
- }
- }
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】
打赏
扫码打赏,您说多少就多少