37

ここここここ、ここなど、このトピックに関するいくつかの質問を読みまし。しかし、私の場合、実用的な解決策を提供したものはありません。

私がしたいこと:

自社の従業員のみが使用する Web アプリに Windows 認証を実装します。この方法では、アプリにログインする必要はありませんが、Windows にログインすることで既に認証されています。

また、ユーザーが割り当てられている可能性のある Active Directory セキュリティ グループに基づいて、アプリの特定の領域を制限する必要があります。

だから私はコントローラー/アクションを装飾できるようにしたい

[Authorize(Roles="SomeRole")]

私が試したこと:

私は持っている

<authentication mode="Windows" />

私のweb.configで。<roleManager>そして、上記にリンクされた投稿のいくつかに見られるように、 a のいくつかの順列を追加しました。現在、私はこのロールマネージャーを持っています

<roleManager defaultProvider="WindowsProvider"
  enabled="true"
  cacheRolesInCookie="false">
      <providers>
        <add
          name="WindowsProvider"
          type="System.Web.Security.WindowsTokenRoleProvider" />
      </providers>
    </roleManager>

この投稿にあるように。

そのままコントローラーを で飾れば[Authorize]、ちゃんとアクセスできます。

でも:

ネットワークのユーザー設定で、「IT」と呼ばれる AD セキュリティ グループの一部であることがわかります。しかし、同じコントローラーを装飾すると[Authorize(Roles="IT")]、asp.net 開発サーバーによって許可されていない 401 が提供される空白の画面が表示されます。 これは予想外です。 Windows にログインしていて、グループ "IT" の一員であるため、ページを表示できるはずだと思います。

このトピックで私が見つけたほとんどすべてのことは、私がやろうとしていることを非常に簡単に達成できるように思えますが、明らかに何かが欠けています.

4

1 に答える 1

42

開発のために、匿名認証が無効になり、Windows認証が有効になるように、MVCプロジェクトの開発サーバープロパティを設定してIISExpressを使用しています。Web 構成は、TFS ビルド サーバーを使用して展開され、認証も上記のようにセットアップされ、それらの場所でも機能するサーバーをテストおよびリリースします。

私のweb.configにはあります。

  <system.web> 
....
       <authentication mode="Windows" />
        <authorization>
          <deny users="?" />
        </authorization>
        <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
          <providers>
            <clear />
            <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
          </providers>
        </roleManager>
....

    </system.web>

使うことができます

[Authorize(Roles = @"DOMAIN\ADGroup")]
Public ActionResult Index()
{...}

また

 public ActionResult Index()
        {
            var User = System.Web.HttpContext.Current.User;
            if (User.IsInRole("DOMAIN\\ADGroup"))
            {
                return RedirectToAction("IRSAdmin");
            }
            return View();
        }

ログオフして再度ログインすることを忘れないようにした後、AD グループに与えられた許可が適用されました。

于 2013-06-21T01:34:51.147 に答える