0

Windows 2012 サーバーと VS2012 を使用して、Windows 認証用のイントラネット テンプレートを使用して新しい MVC 4 プロジェクトを作成します。Windows 2012 サーバーに公開します。バン、すべてが機能し、サイトを熟読できます。そこで、HomeController に以下を追加します。

[Authorize(Roles = @"DOMAIN\GROUP")]
public class HomeController : Controller 
{
...
}

認証は引き続き機能しますが、すぐに大きな赤いエラー ページが表示されます。「エラーです。リクエストの処理中にエラーが発生しました。」

ドメイン ローカル グループ、グローバル グループ、グループへのフル パスを試しても何も機能しません。それから私は試します

[Authorize(Users = @"DOMAIN\ME")]
public class HomeController : Controller 
{
...
}

それはうまくいきます!しかし、Windowsグループを使いたいです。私が読んだことはすべて、 Roles = ... を使用するだけで機能すると言っていますが、何らかの理由で、何かが欠けています。基本的なテンプレートから何も変更していません。[Authorize(Roles = "..."] を追加しただけです。

私はGoogleで何時間も検索しましたが、ほとんどがここでstackoverflowに行き着きました。私は何が欠けていますか?シンプルなものでなければなりません。

それが役立つ場合...サーバーは私自身の開発サーバーであり、他のプロジェクトのWCFおよびASP.NET Forms WebサイトでWindows認証と承認を行っています。

新しい開発: ロールの場合、サーバーは SqlRoleProvider に基づいてロール メンバーシップにアクセスしようとしているようです

[SqlException (0x80131904): Login failed for user 'CS\CS446$'.]
...
System.Web.Security.SqlRoleProvider.GetRolesForUser(String username) +1466
System.Web.Security.RolePrincipal.IsInRole(String role) +12322757
System.Linq.Enumerable.Any(IEnumerable`1 source, Func`2 predicate) +149
System.Web.Mvc.AuthorizeAttribute.AuthorizeCore(HttpContextBase httpContext) +265
...

Windows を使用して私を認証し、Windows 経由でも認証しているように見えます。

4

2 に答える 2

1

上記の症状は、実際に問題を見つけたサーバー構成に戻ることを示しています。

条件:これは、デフォルトのメンバーシッププロバイダーがAspNetSqlRoleProviderとして構成されているデフォルトサイト内のアプリケーションです。アプリケーションの.NETロールは、デフォルトのWebサイト(または使用する親Webサイト)から設定を継承します。

アプリケーションの.NETロールの下で、[デフォルトプロバイダーの設定...]をクリックします。

どうやらMVC4.5のイントラネットテンプレートにはこの設定が含まれておらず、ロールの継承された設定を受け入れますが、Active Directoryのユーザーを正しくチェックします(つまり、データベースに機能しないユーザーがいますが、Windowsユーザーがいます元の質問に記載されているように行います)。

解決策: Web.configで、次の行を追加して、AspNetWindowsTokenRoleProviderをデフォルトとして有効にし、AspNetSqlRoleProviderを削除しました。

<system.web>
  ...
  <roleManager defaultProvider="AspNetWindowsTokenRoleProvider" enabled="true">
    <providers>
      <remove name="AspNetSqlRoleProvider"/>
    </providers>
  </roleManager>
</system.web>

私が最初に次のように動作させたので、このセクションはオプションのようです。

<roleManager defaultProvider="AspNetWindowsTokenRoleProvider" />

これが他の欲求不満の魂に役立つことを願っています。根本的な問題を見つけたIIS構成に戻ることを考えさせるために、Treyにヒントがあります。

于 2013-02-14T15:43:23.043 に答える
0

私が自分自身を実装しているときに、この権利を無精ひげにするのはおかしいです。あなたはそれを正しくやっていると思います。あなたがテストしているグループが悪いだけかもしれません。

これは私にとってはうまくいきます:

[Authorize(Roles = @"DOMAIN\Domain Users")]
public class HomeController : Controller

ここで、私の Web.config の重要な部分を適切に測定します。

<authentication mode="Windows" />
<authorization>
    <deny users="?" />
</authorization>
<identity impersonate="true" />

アップデート

connectionStrings が SQL ログインを使用していることと、SQL が混合モード用にセットアップされていることを確認してください。そうでない場合は、セットアップに戻って変更する必要があります。開発ボックスに一度インストールしたときに、開発者が混合モードを選択していなかったことを理解するのに 3 日かかりました。私はあなたがこの問題に苦しんでいるように感じます.

于 2013-02-14T01:34:23.197 に答える