我创建了一个自定义成员资格和角色提供程序,以利用ASP.NET MVC 4中内置的身份验证和授权。在我尝试将应用程序部署到测试环境之前,我的应用程序开发过程中一切都很顺利。
从Visual Studio以调试模式启动应用程序非常正常。但是,我随后使用VisualStudio的一键部署将我的应用程序加载到在我的开发机器上运行的IIS实例中。我可以在浏览器中加载应用程序,但身份验证不再有效。使用Fiddler,我看到一个cookie被发送回来,但我无法访问使用[授权]属性限制的部分网站。
以下是我的web.config中的相关片段。
<membership defaultProvider="PonosMembershipProvider">
<providers>
<clear />
<add name="PonosMembershipProvider" type="Ponos.Identity.PonosMembershipProvider" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/Ponos" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<clear />
<add name="DefaultRoleProvider" type="Ponos.Identity.PonosRoleProvider" connectionStringName="DefaultConnection" applicationName="/Ponos" />
</providers>
</roleManager>
此外,我在两个自定义提供程序中都设置了应用程序名称,逻辑如下:
public override string ApplicationName
{
get
{
return "Ponos";
}
set
{
throw new NotImplementedException();
}
}
此外,在附加到IIS的运行实例后,我看到输入到表单中的信息通过了验证,但没有向具有受限授权访问权限的页面授予访问权限。
此外,用于部署的数据库中填充了与开发数据库相同的值。
当提供程序在调试环境中运行良好时,为什么它们在部署后不能工作?
"我看到输入到表单中的信息通过了验证,但没有授予限制授权访问的页面访问权限。"
似乎是权限问题!
只有当我部署的服务器的IP直接访问时,这个问题才会出现。当我添加了一个将域映射到IP的主机条目,并随后在我的authcookie中设置了相同的域时,问题得到了解决。
我不知道如果域是IP地址,为什么我不能访问cookie,但这确实解决了问题。