2016-08-16 128 views
0

我有一個ASP.NET 3.5應用程序,我最近使用多個成員資格和角色提供程序進行擴展,以在該應用程序中「附加」第二個應用程序。我無法直接訪問IIS配置,因此我無法將其分解到單獨的應用程序目錄中。ASP.NET 3.5多角色提供程序

這就是說,我已成功分離登錄;然而,在我登錄後,我可以通過自定義角色例程驗證用戶所屬的組,並且我可以爲兩個「應用程序」使用不同密碼的相同用戶名。

我遇到的問題是,當我使用與其他成員身份相同的用戶名(它在目錄上使用web.config角色)創建用戶時,我可以手動將URL切換到其他應用程序,並且它拿起用戶名,並加載該應用程序的角色。很明顯,這是不好的,因爲它允許用戶創建一個有權訪問其他應用程序的用戶名,並與其他用戶的角色交叉到另一個應用程序中。

我該如何緩解這種情況?如果我僅限於一個應用程序與多個角色和成員提供者一起工作,並且auth cookie存儲明顯可轉移的用戶名,那麼我能做些什麼嗎?

我意識到情況並不理想,但這些都是目前強加的限制。

示例性認證(在驗證):

FormsAuthentication.SetAuthCookie(usr.UserName, false); 

此cookie需要被基於用戶令牌我懷疑的,而不是用戶名,以便將兩個提供分開?那可能嗎?

回答

0

也許不是問題的答案我更願意去,但我可以通過使一個應用程序中使用的用戶名的身份驗證cookie來的兩個人分開,而其他使用ProviderUserKey(GUID) 。這樣auth cookie不會被從一個「應用程序」識別到另一個。

FormsAuthentication.SetAuthCookie(user.ProviderUserKey.ToString(), false); 

這需要我奇怪地處理事情了一點,但它只是來到了增加了一些擴展方法,以及處理通過我自己班上的成員公用事業(我是做無論如何)。

ex。擴展方法:

public static string GetUserName(this IPrincipal ip) 
{ 
    return MNMember.MNMembership.GetUser(new Guid(ip.Identity.Name), false).UserName; 
} 

凡MNMember是一個靜態類,MNMembership還是返回了二次會員供應商,是的getUser成員提供的標準功能。

var validRoles = new List<string>() { "MNExpired", "MNAdmins", "MNUsers" }; 
      var isValidRole = validRoles.Intersect(uroles).Any(); 
      if (isValidRole) 
      { 
       var userIsAdmin = uroles.Contains("MNAdmins"); 
       if (isAdmin && !userIsAdmin) 
       { 
        Response.Redirect("/MNLogin.aspx"); 
       } 
       else if (!userIsAdmin && !uroles.Contains("MNUsers")) 
       { 
        Response.Redirect("/MNLogin.aspx"); 
       }... 

其中isAdmin正在檢查子目錄是否顯示在路徑中。

似乎哈克,但也似乎工作。

編輯:現在我沒有使用用戶名作爲標記,我應該能夠回到使用web.config目錄安全性,這意味着應該能夠移除主頁面的破解。 (理論上?)

編輯2:不 - asp.net使用username auth cookie來解析web.config中指定的角色。