在 MVC3 Web 应用程序中将表单身份验证更改为 Windows 身份验证需要哪些步骤?
What steps are required to change Forms Authentication over to Windows Authentication in an MVC3 web application?
我正在开发一个遗留的 MVC3 应用程序,它使用 Forms 身份验证和 SQLMembership Provider 来授权用户访问。它具有以下配置:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="3" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/TimeSheets" passwordFormat="Clear" />
</providers>
</membership>
<profile inherits="Timesheets.Services.UserProfile">
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/TimeSheets" />
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/TimeSheets" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/TimeSheets" />
</providers>
</roleManager>
如果我使用 Windows 身份验证创建一个新的 MVC 应用程序,则此配置似乎已替换为如下配置:
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
我曾尝试更改旧版 MVC 站点的配置以使用这种新的身份验证模式,但这无法进行身份验证(我收到错误消息“401.2.:未授权:由于服务器配置导致登录失败。”)
但是新的 web 项目运行并正确验证(因此它不是 AD 或本地权限问题)
我曾想尝试将所有遗留代码放入新项目,但它相当大且复杂,在新站点中重新排列所有内容可能非常耗时。
我希望更改 Auth 模型应该更简单且干扰更少 - 但是我需要执行哪些额外步骤来配置旧站点以进行 Windows 身份验证?
我的配置更改的缺失部分在 .proj 文件中。这是因为在 Visual Studio.
中使用了 IIS Express
为了让 Windows Auth 在 IIS Express 中工作以进行调试,您需要在项目设置中对其进行配置:
行:
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
需要替换为:
<IISExpressAnonymousAuthentication>disabled</IISExpressAnonymousAuthentication>
<IISExpressWindowsAuthentication>enabled</IISExpressWindowsAuthentication>
我正在开发一个遗留的 MVC3 应用程序,它使用 Forms 身份验证和 SQLMembership Provider 来授权用户访问。它具有以下配置:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="3" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/TimeSheets" passwordFormat="Clear" />
</providers>
</membership>
<profile inherits="Timesheets.Services.UserProfile">
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/TimeSheets" />
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/TimeSheets" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/TimeSheets" />
</providers>
</roleManager>
如果我使用 Windows 身份验证创建一个新的 MVC 应用程序,则此配置似乎已替换为如下配置:
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
我曾尝试更改旧版 MVC 站点的配置以使用这种新的身份验证模式,但这无法进行身份验证(我收到错误消息“401.2.:未授权:由于服务器配置导致登录失败。”)
但是新的 web 项目运行并正确验证(因此它不是 AD 或本地权限问题)
我曾想尝试将所有遗留代码放入新项目,但它相当大且复杂,在新站点中重新排列所有内容可能非常耗时。
我希望更改 Auth 模型应该更简单且干扰更少 - 但是我需要执行哪些额外步骤来配置旧站点以进行 Windows 身份验证?
我的配置更改的缺失部分在 .proj 文件中。这是因为在 Visual Studio.
中使用了 IIS Express为了让 Windows Auth 在 IIS Express 中工作以进行调试,您需要在项目设置中对其进行配置:
行:
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
需要替换为:
<IISExpressAnonymousAuthentication>disabled</IISExpressAnonymousAuthentication>
<IISExpressWindowsAuthentication>enabled</IISExpressWindowsAuthentication>