我有一个使用Active Directory进行身份验证的WebForms应用程序。整个公司应该能够(并且可以)访问该应用程序,但是“ Mgr”文件夹中有几种形式,只能由AD组“ ta_admins”访问。我已经阅读了关于SO的多个线程,但是似乎什么也无法工作。
我在“ Mgr”文件夹中创建了一个Web.config文件,并尝试了以下操作:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles = "ta_admins" />
<deny users = "*" />
</authorization>
</system.web>
</configuration>
我尝试更改“
仅当用户名参数与当前Windows身份中的用户名匹配时,才支持此方法。
我是ta_admins的成员。
这是应用程序Web.config的一部分:
<system.web>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
..............
</system.web>
aspx页面具有一个网格,其中填充有特定AD组的成员。当我不尝试控制可以访问“ Mgr”文件夹的用户组时,此方法就很好。后面的代码如下(不确定是否需要,但是只是在情况下...):
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[5]
{
new DataColumn("givenName", typeof (string)),
new DataColumn("sn", typeof (string)),
new DataColumn("mail", typeof (string)),
new DataColumn("department", typeof (string)),
new DataColumn("manager", typeof (string))
});
using (var context = new PrincipalContext(ContextType.Domain, null))
{
using (var group = (GroupPrincipal.FindByIdentity(context, "reps")))
{
var users = group.GetMembers(true);
foreach (UserPrincipal user in users)
{
DirectoryEntry de = user.GetUnderlyingObject() as DirectoryEntry;
dt.Rows.Add
(
Convert.ToString(de.Properties["givenName"].Value),
Convert.ToString(de.Properties["sn"].Value),
Convert.ToString(de.Properties["mail"].Value),
Convert.ToString(de.Properties["department"].Value),
Regex.Replace((Convert.ToString(de.Properties["manager"].Value)), @"CN=([^,]*),.*$", "$1")
);
}
rgAdUsrs.DataSource = dt;
rgAdUsrs.DataBind();
}
}
}
请让我知道是否需要其他信息。
答案 0 :(得分:0)
我发现了完成此任务的不同方法。我只得到用户所在的所有组的列表,并以此为基础进行表单访问。
PrincipalSearchResult<Principal> groups = UserPrincipal.Current.GetGroups();
IEnumerable<string> groupNames = groups.Select(x => x.SamAccountName);
if (!groupNames.Contains("ta_admins"))
{
Response.Redirect("~/AccessDenied.aspx");
}
}
然后我禁用了目录浏览文件夹的web.config。