2012-01-19 19 views
1

MVCソリューションで次のアクション属性を実装しました。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は、再加工する必要があると思います。アイデアは、サイトにアクセスするには、ユーザーがアクティブディレクトリの管理者またはユーザーグループに属している必要があり、ユーザーロールに割り当てられている場合は、他のグループに属している必要があります。たとえば、完全に正常だ/

答えて

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属性で同様の機能を実現できるので、おそらく必要ないでしょう。

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

私は毎日少しずつ学校に通っています。私の問題は、クライアントに送信される実際の401ページにあります。それを削除する方法はありますか?サイズを小さくする方法があります。デフォルトの承認方法は...私は迅速に試してみましょう。 –

+1

ダーリンは正しいです。私の記事「ASP.NET MVCを使用してイントラネットサイトを作成する方法」を参照してください。http://msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx – RickAndMSFT