我有一个asp.net webform应用程序(ProA)。虽然我可以访问源代码,但它是不久前由其他人构建的。现在,我完成了另一个应用程序,即MVC5(ProB)。
ProA使用asp.net成员资格来验证用户身份。 ProB未使用任何会员资格。现在,我们想要向ProB添加用户身份验证,并且ProB的某些部分也使用用户名作为某些数据的参数。
现在,我们要强制用户从ProA登录,然后点击链接/按钮,将用户重定向到ProB。在ProB中,我们创建一个授权过滤器来验证用户是否有权,然后显示页面。
我尝试在各种应用程序中使用表单身份验证,如下所述:表单身份验证跨应用程序。但它不起作用。我在web.config中所做的更改是:
<authentication mode="Forms">
<forms name="X.ASPXAUTH" loginUrl="~/Login.aspx" path="/"
protection="All"
enableCrossAppRedirects="true"
/>
</authentication>
可能是因为那个是webform而另一个是MVC吗?此外,ProB实际上还没有安装任何成员资格,它是否会影响这种形式的真实性?
还有其他建议吗?
感谢。
---添加了更多信息:
1)我正在我的本地机器上测试。我在VS2012中运行这两个站点。我应该为域名使用什么? “localhost” 的? “.localhost”?或者,根本不使用域名?似乎不起作用。
2)我在ProA上添加了一个按钮,点击后,使用此重定向到ProB:
HttpContext.Current.Response.Redirect("http://localhost:12345/", false);
这是正确的方法吗? HttpContext具有用户身份。
3)ProB是否必须拥有会员资格?现在,ProB没有会员资格功能,原因是什么?
答案 0 :(得分:2)
跨Web表单和MVC应用程序共享身份验证不应该有任何问题。基础技术是相同的.Net使用加密的cookie,其形式为auth ticket。
阅读以下MSDN文章:https://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx
需要注意的主要事项是domain
引用和machineKey
配置。
表单auth config的domain
属性允许浏览器将该auth cookie包含在发送到每个站点的请求中。然后machineKey
部分是处理加密/解密的部分。
这两个站点必须具有相同的配置才能使其正常工作,并且还在同一个域上运行,即xyz.contoso.com和abc.contoso.com
<强>的web.config 强>
<configuration>
<system.web>
<authentication mode="Forms" >
<!-- The name, protection, and path attributes must match
exactly in each Web.config file. -->
<forms loginUrl="login.aspx"
name=".ASPXFORMSAUTH"
protection="All"
path="/"
domain="contoso.com"
timeout="30" />
</authentication>
<!-- Validation and decryption keys must exactly match and cannot
be set to "AutoGenerate". The validation and decryption
algorithms must also be the same. -->
<machineKey
validationKey="[your key here]"
decryptionKey="[your key here]"
validation="SHA1" />
</system.web>
</configuration>
修改强>
使用以下链接生成您的机器密钥:http://www.developerfusion.com/tools/generatemachinekey/