我正在使用连接到SQL Server dB的默认MembershipProvider,ProfileProvider和RoleProvider构建MVC3 Intranet应用程序。 如果我使用Forms身份验证,角色提供程序将正确填充。 当我切换到Windows身份验证时,角色提供程序不再填充。 这是通过在代码中放置一个断点并查看“Roles.GetRolesForUser()”来测试的。 我怀疑正在发生的是传递给数据库的用户标识是'DOMAIN \\ USERID'(这是User.Identity.Name中的内容),而数据库中的用户标识只是用户标识。

由于一切都是默认的,因此发布的代码不多。

<authentication mode="Windows" />
<authorization>
  <deny users="?"/>
</authorization>
  <membership defaultProvider="AspNetSqlMembershipProvider">
    <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
  <properties></properties>
</profile>
  <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider" cacheRolesInCookie="true">
    <providers>
    <clear />
    <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
    <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>
</roleManager>

我的第一个想法是,我们可以在身份传递给成员资格提供者之前删除域名,但User.Identity.Name只是获取。

纠正这个问题的最佳途径是什么,而不必将整个数据库更改为拥有domain \\ userid而不仅仅是userid? 这可以在不必编写自定义成员/配置文件/角色提供程序的情况下完成吗?

#1楼 票数:1

如果您只想使用Windows身份验证,那么您不希望使用SqlRoleProvider,而是希望使用WindowsTokenRoleProvider,它将返回其AD角色。 (没有理由使用成员资格提供程序,因为在使用Windows身份验证时,如果未经过身份验证,则无法访问该网站)

如果您想使用Windows身份验证,但使用SqlRoles,那么您可能希望执行以下操作:

http://weblogs.asp.net/scottgu/pages/Recipe_3A00_-Implementing-Role_2D00_Based-Security-with-ASP.NET-2.0-using-Windows-Authentication-and-SQL-Server.aspx

  ask by Toby Jones translate from so

未解决问题?本站智能推荐:

1回复

获取ASP.NETMVC3Intranet应用程序中的登录用户名

我正在研究MVC 3内部网应用程序(Windows身份验证)。 一旦用户登录,应用程序必须显示用户的配置文件页面。为此,必须在Global.asax.cs中的以下路由中将登录用户的用户名作为路由参数传入。 在这里,我已经使用了一些替代品。 起初我使用了Environment.User
2回复

MVC3Windows身份验证覆盖User.Identity

我正在使用带有MSSQL后端的MVC3构建Intranet应用程序。 我有身份验证和角色(通过自定义角色提供程序)正常工作。 我现在要做的是重写User.Identity以允许像User.Identity.FirstName这样的项目。 但我找不到任何代码可以告诉我在WindowsIden
1回复

MVC3锁定会员用户

我希望我的站点上的管理员能够锁定成员,但默认mvc成员身份的IsLockedOut()是readonly。 我读到我需要创建一个自定义成员资格提供程序,但我不完全确定这意味着什么。 我是否需要使用membershipUser属性创建新模型? 如果可能,我不想在数据库中创建新表。 这是我
2回复

创建会员资料MVC3

我正在为我的ASP.Net MVC 3应用程序创建一个Admin页面。 我可以创建一个新用户,如下所示: 我可以分配这样的角色: 但是,如何创建和附加新的个人资料? ProfileManager具有查找和删除配置文件的方法,但没有创建方法的方法。 如果重要,我添加了这样的自定义
4回复

Intranet/Internet的Windows身份验证

我正在为我的公司开发ASP.net Web应用程序。 一些用户在内部网络(Intranet)中使用此站点,而另一些用户使用Internet站点。 我正在使用Windows身份验证模式。 我需要找到一种方法,以不对 Intranet用户提示 Windows身份验证模式,而对Internet
1回复

如何对Intranet网站使用Windows身份验证?

我正在为我的公司开发Asp .Net(MVC3)Web应用程序。有些用户在内部网络中使用此网站,有些用户将使用Internet站点。我必须使用该网站对用户进行身份验证。我该怎么做? 是否只有在部署解决方案后才可以检查身份验证代码? 如何在我的本地解决方案中进行检查?任何人都可以逐步解释其中涉
5回复

.net与Intranet中Java相比的优势

我们公司的Intranet拥有30,000多个网页和160多个Web应用程序。 5000多名员工正在使用此功能。 我们还拥有150多个Web应用程序和100多个网站的互联网。 互联网和Intranet已有7年以上的历史了,它们都在经典ASP上运行。 最近,一些“技术架构师”提出了一个
5回复

测试使用Windows身份验证的Intranet站点

我正在尝试开发使用Windows身份验证的Intranet应用程序/网站。 我想用多个用户,角色等来测试它。 目前我只使用自己的域帐户。 有没有办法模拟网站的不同用户?