2012-01-19 134 views
1

我在我的MVC解決方案中實現了以下action屬性。401錯誤:Active directory&Asp.Net MVC

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
public class AuthorizeADAttribute : AuthorizeAttribute 
{ 
    public string[] Groups { get; set; }  

     protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (base.AuthorizeCore(httpContext)) 
     { 
      /* Return true immediately if the authorization is not 
      locked down to any particular AD group */ 
      if (Groups == null) 
       return true; 

      foreach (var group in Groups) 
       if (httpContext.User.IsInRole(group)) 
        return true; 

     } 
     return false; 
    } 
} 

並調用它像這樣:

public const string Admin = "MY_DOMAIN\\Admins"; 
public const string Users = "MY_DOMAIN\\Users"; 
public const string AddUser = "MY_DOMAIN\\AddUser"; 


[AuthorizeAD(Groups = new string[] { Admin, Users })] 
public ActionResult GridData(...) 
{ ... } 

[AuthorizeAD(Groups = new string[] { Admin, Users, AddUser })] 
public ActionResult Add(...) 
{ ... } 

這似乎就像是工作的罰款,到目前爲止(在本地沒有問題),直到有人注意到(在另一個問題我貼),我」在部署的實例上一直收到401個錯誤。

Error

我覺得我AuthorizeADAttribute需要返工,除非任何人有什麼樣的問題可能是在主機環境的想法。這個想法是,用戶必須位於活動目錄的admin或用戶組才能訪問該站點,並且如果他/她被分配給用戶角色,則他們也需要屬於另一個組,例如:添加,刪除,更新等..

到目前爲止,我幾乎難倒了:/

回答

2

It seemed like it was working fine so far (locally without a problem), until someone noticed (on another question I posted), that I've been receiving 401 errors on the deployed instance

這是完全正常的,這是多麼NTLM authentication作品。這是一個質詢 - 響應認證協議,意味着服務器通過發送客戶端響應的401頁面來挑戰客戶端,因此,您看到的401是服務器發送給客戶端以驗證自己的挑戰的一部分。您看到最終客戶成功地應對了挑戰,並獲得了200次成功認證。

我不認爲你應該用你的自定義授權屬性重做任何事情。這只是你可能不需要它,因爲你可以通過默認的Authorize屬性實現類似的功能:

[Authorize(Roles = "MY_DOMAIN\\Admins,MY_DOMAIN\\Users" })] 
public ActionResult GridData(...) 
+0

真的?我每天都受到一點教育。我的問題是發送給客戶端的實際的401頁面,是否有一種方法可以將其刪除/將其替換爲較小的頁面......對於默認授權...讓我試試快速。 –

+1

達林是正確的。您應該閱讀我的文章如何使用ASP.NET MVC創建Intranet站點http://msdn.microsoft.com/zh-cn/library/gg703322(VS.98).aspx – RickAndMSFT

相關問題