很抱歉,如果之前已经提出此问题,但我搜索了Google和此网站,但无法通过针对初学者找到完整的作品。我正在尝试编写一个使用ASP.NET 2对活动目录组进行身份验证的登录页面。我发现了各种文章,但它们似乎都缺乏新手的关键信息。我已经设法将一个登录页面拼凑在一起,该登录页面可以处理几个活动目录登录,但我不能将其限制为仅作为特定活动目录组成员的用户。 我的web.config包含以下内容:
<connectionStrings>
<add name="ADConnectionString" connectionString="LDAP://domainname.local/DC=domainname,DC=local" />
</connectionStrings>
<authentication mode="Forms">
<forms
loginUrl="Login.aspx"
name=".ADAuthCookie" timeout="1000" />
</authentication>
<authorization>
<allow roles="DOMAINNAME\group"/>
<deny users="?"/>
</authorization>
<membership defaultProvider="MyADMembershipProvider">
<providers>
<add name="MyADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
attributeMapUsername="sAMAccountName"/>
</providers>
</membership>
我已经匿名了真正的域名,但我相信这部分是有效的,因为它允许我在我使用时登录:
<allow roles="DOMAINNAME\username"/>
<deny users="?"/>
项目的其余部分包含一个带有WebControls.Login控件的Login.aspx页面和一个带有以下page_load函数的Default.aspx页面,以证明登录已经有效:
Response.Write("Hello, " + Server.HtmlEncode(User.Identity.Name));
我试过了
<allow roles="DOMAINNAME\group"/>
<deny users="*"/>
但这似乎否认了所有人。
我错过了什么?
答案 0 :(得分:0)
据我所知,web.config的Authorization部分不能像ActiveDirectoryMembershipProvider那样工作。您似乎需要在代码中检查角色/组访问权限。
我最近花了几天时间研究你在尝试什么,但没有发现任何东西。结束实现我们自己的AD登录模块以获得所需的行为。如果您决定实施自己的解决方案,我建议您使用ActiveDirectoryMembershipProvider进行身份验证。然后自己处理授权。
答案 1 :(得分:0)
在web.config文件中尝试此更改
<configuration>
<configSections>
<section name="loginRedirectByRole" type="dirrerentloginusers.LoginRedirectByRoleSection" allowLocation="true" allowDefinition="Everywhere" />
<loginRedirectByRole>
<roleRedirects>
<add role="Manager" url="/Manager/ManagerPage.aspx" />
<add role="User" url="/User/UserPage.aspx" />
</roleRedirects>
<system.web>
<authentication>
<forms loginUrl="LoginForm1.aspx" protection="All"></forms>
</authentication>
<roleManager enabled="true"></roleManager>
<compilation debug="true" targetFramework="4.0" />
</system.web>
为logintype
创建一个类 public class LoginRedirectByRoleSection : ConfigurationSection
{
[ConfigurationProperty("roleRedirects")]
public RoleRedirectCollection RoleRedirects
{
get
{
return (RoleRedirectCollection)this["roleRedirects"];
}
set
{
this["roleRedirects"] = value;
}
}
}
public class RoleRedirectCollection : ConfigurationElementCollection
{
public RoleRedirect this[int index]
{
get
{
return (RoleRedirect)BaseGet(index);
}
}
public RoleRedirect this[object key]
{
get
{
return (RoleRedirect)BaseGet(key);
}
}
protected override ConfigurationElement CreateNewElement()
{
return new RoleRedirect();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((RoleRedirect)element).Role;
}
}
public class RoleRedirect : ConfigurationElement
{
[ConfigurationProperty("role", IsRequired = true)]
public string Role
{
get
{
return (string)this["role"];
}
set
{
this["role"] = value;
}
}
[ConfigurationProperty("url", IsRequired = true)]
public string Url
{
get
{
return (string)this["url"];
}
set
{
this["url"] = value;
}
}
}
然后将此代码添加到您的代码隐藏页面中,并将用户重定向到他的页面
private void RedirectLogin(string username)
{
LoginRedirectByRoleSection roleRedirectSection = (LoginRedirectByRoleSection)ConfigurationManager.GetSection("loginRedirectByRole");
foreach (RoleRedirect roleRedirect in roleRedirectSection.RoleRedirects)
{
if (Roles.IsUserInRole(username,roleRedirect.Role))
{
// Response.Redirect(roleRedirect.Url);
FormsAuthentication.RedirectFromLoginPage(username,true);
Response.Redirect(roleRedirect.Url);
}
}
}
答案 2 :(得分:0)
我在您发布的web.config文件中看不到任何RoleProvider
。如果您想将Windows组成员身份用作ASP.NET角色,我认为您需要WindowsTokenRoleProvider。