如何将UserIdentity / UserName从WebForm应用程序传递到MVC5应用程序?

时间:2015-02-11 21:51:58

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 webforms

我有一个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没有会员资格功能,原因是什么?

1 个答案:

答案 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/