2012-10-22 53 views
2

我正在创建需要Windows身份验证的Intranet网站。我已经设置了一切,或者我认为我确实使用了在数据库中管理的Windows身份验证和角色。这很重要,因为我无法使用Active Directory组和角色。ASP.net使用自定义数据库的Windows身份验证

它的工作原理。当我进入网站时,它会显示我的Windows用户名,并可通过User.Identity.Name访问。我可以使用User.IsInRole("roleName")验证角色,它也可以工作。

现在我遇到的问题是,当我使用Membership.GetUserMembership.GetAllUsers我总是得到空和一个空的集合。

我RoleManager提供商是:

<add 
name="SqlRoleManager" 
type="System.Web.Security.SqlRoleProvider" 
connectionStringName="ApplicationServices" 
applicationName="/appName" 
/> 

我的成员资格提供这样一个:

<add 
name="AspNetSqlMembershipProvider" 
type="System.Web.Security.SqlMembershipProvider" 
connectionStringName="ApplicationServices" 
applicationName="/appName" 
/> 

我缺少的东西或我的配置是错误的? 谢谢!

+0

您是否设置了默认的成员资格提供者? –

+0

我相信有一个/太多内部应用程序名称 –

+0

检查此链接的更多详细信息:http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.aspx –

回答

2

为什么你想打电话给Membership.GetUser?您已通过Windows身份验证进行身份验证。如果你想使用Windows身份验证的成员资格(为什么,我不知道),你必须跳过一些更多的篮球。

您可以使用ActiveDirectoryMembershipProvider而不是SqlMembershipProvider。这使您可以调用GetUser并检索AD信息。

您可以在登录时将Windows身份验证信息复制到SqlMembership数据库中。

您可以创建一个自定义成员资格提供程序,允许您自己执行所有身份验证。

因此,第一个问题是您为什么要使用Membership?

+0

嗨,谢谢你的回答。 我不使用ActiveDirectoryMembershipProvider,因为据我所知,它是使用Active Directory组,我不需要,我不能修改。 关于使用成员资格我知道我已经设法使用Windows身份验证登录,但我想使用'Membership.GetUser'来获取当前用户的UserId,我不能用'User.Identity'或IPrincipal来完成。现在,我使用用户名对UserId进行额外的查询,但它看起来不正确,因为Membership应该会帮助这些方法。 – Sheol

+0

复制Windows身份验证意味着什么。信息进入数据库? 关于创建自定义会员资格...以及我不知道如何创建一个新的,仍然使用Windows身份验证。我的意思是只显示当前的Windows用户而不询问任何密码也不必管理它。 – Sheol

+0

@Sheol - 编号ActiveDirectoryMembershipProvider仅关于认证。您使用WindowsTokenRoleProvider从AD提供AD组。如果你使用SqlRoleProvider和ActiveDirectoryMembershipProvider,那么它会做你想做的。 –

相关问题