web-dev-qa-db-ja.com

Active DirectoryグループをロールとしてWindows認証を使用する

hereherehere および here ;など、このトピックに関するいくつかの質問を読みました。しかし、私の場合、有効なソリューションを提供しているものはありません。

やりたいこと:

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

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

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

_[Authorize(Roles="SomeRole")]
_

私が試したこと:

私が持っています

_<authentication mode="Windows" />
_

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

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

this postにあります。

そのまま、_[Authorize]_でコントローラーを装飾すれば、うまくアクセスできます。

ただし:

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

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

33
Forty-Two

開発者は、匿名認証が無効になり、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グループに与えられた許可を適用しました。

38
ozhug