如何在ASP.NET中进行安全的ActiveDirectory身份验证

时间:2015-08-20 03:45:01

标签: c# asp.net asp.net-mvc authentication active-directory

我有一个网站用于某种管理。它只能在域网络中使用,并且必须非常安全。这就是为什么我决定使用现有的域身份验证。我已经打开了Windows身份验证和模拟。现在,当我打开此网站时,该用户已获得WindowsIdentity的授权。

第一个问题是如何在域组内安全地检查用户的身份。我的意思是,如果用户使用非域帐户进行身份验证,我不应该让用户进入 例如,用户使用本地计算机管理员用户登录Windows,打开我的网站,User.Identity.IsAuthenticated是否为真(因为他是Windows用户,无论如何)?也许,我应该检查某种证书,来源或所有者。如何确保我们的用户属于我们的域并且它不是入侵者?

第二个问题是:我需要确定用户是否属于某个组。我有一个组的ID:S-1-5-21-1455132813-...。使用此ID识别组是否可以?我只是不确定这些ID是多么静态。也许,有一种更合适的方式来检查它。

现在,我这样做:

private readonly _allowedGroupId; // read from a config

var wi = WindowsIdentity.GetCurrent();
if (wi.IsAuthenticated && wi.Groups.Any(x => x.Value == _allowedGroupId))
{
    // authorized
}

1 个答案:

答案 0 :(得分:3)

要检查Windows角色,您应该使用角色管理器:

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

并检查代码中的角色:

Roles.IsUserInRole(@"domain\active_directory_role_name")