0

我的ASP.NET webapp將受第三方代理(SM)的保護。 SM會攔截對webapp的每個調用,將用戶認證爲有效的系統用戶,添加一些用戶名頭信息並將其重定向到我的webapp。然後我需要驗證用戶是我網站的活躍用戶。ASP.NET外部驗證服務集成

目前我通過在Global.asax.cs文件中實現Application_AuthenticateRequest方法來驗證用戶身份。我有一個自定義成員資格提供程序,它的ValidateUser方法檢查用戶是否存在於我的數據庫的users表中。

只是想得到意見,如果這是一個好方法或不。

protected void Application_AuthenticateRequest(object sender, EventArgs e) 
    { 
     //if user is not already authenticated 
     if (HttpContext.Current.User == null) 
     { 

      var smcred = ParseAuthorizationHeader(Request); 
      //validate that this user is a active user in the database via Custom Membership 
      if (Membership.ValidateUser(smcred.SMUser, null)) 
      { 
       //set cookie so the user is not re-validated on every call. 
       FormsAuthentication.SetAuthCookie(smcred.SMUser, false); 
       var identity = new GenericIdentity(smcred.SMUser); 
       string[] roles = null;//todo-implement role provider Roles.Provider.GetRolesForUser(smcred.SMUser); 
       var principal = new GenericPrincipal(identity, roles); 

       Thread.CurrentPrincipal = principal; 
       if (HttpContext.Current != null) 
       { 
        HttpContext.Current.User = principal; 
       } 
      } 

     } 
    } 

    protected virtual SMCredentials ParseAuthorizationHeader(HttpRequest request) 
    { 
     string authHeader = null; 
     var smcredential = new SMCredentials(); 
    //here is where I will parse the request header for relevant tokens ex username 

     //return smcredential; 
     //mockup below for username henry 
     return new SMCredentials() { SMUser = "henry", FirstName = "", LastName = "", EmailAddr = "" }; 

    } 

回答

2

我會用Attribute方法去保持它更像MVC。它還可以讓你有更多的靈活性,你可能有不同的成員提供者用於不同的控制器/操作。

+0

你的意思是實現一個自定義的AuthorizeAttribute?如果是這樣,那麼從我讀的AuthenticateRequest發生在授權調用之前。 – superartsy

+0

是的,自定義的AuthorizeAttribute是我會做的。事件處理程序和自定義屬性將幫助您實現您所描述的內容,但AuthorizeAttribute將爲您提供更大的靈活性和單元可測試性。 – Duy

+0

爲了保持身份驗證(誰是用戶)和授權(該用戶有什麼權限),我決定在事件處理程序中對用戶進行身份驗證,而我進行角色授權(用戶活動?是用戶管理員? )與授權attrribute。那有意義嗎 – superartsy