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

How To Pass UserIdentity/UserName From WebForm application to MVC5 Application?

我有一个 asp.net 网络表单应用程序 (ProA)。它是前一段时间由其他人构建的,尽管我可以访问源代码。现在,我完成了另一个应用程序,它是一个 MVC5 (ProB)。

ProA 使用 asp.net 成员身份验证用户。 ProB 没有使用任何会员资格。现在,我们要为 ProB 添加用户身份验证,而且 ProB 的某些部分正在使用用户名作为某些数据的参数。

现在,我们想强制用户从 ProA 登录,然后可能单击 link/button,将用户重定向到 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没有会员功能,是这个原因吗?

跨网络表单和 MVC 应用程序共享身份验证应该没有任何问题。底层技术是相同的,.Net 使用加密的 cookie,它具有表单验证票。

阅读以下 MSDN 文章:https://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

需要注意的主要事项是 domain 参考和 machineKey 配置。 表单身份验证配置的 domain 属性允许浏览器在发送到每个站点的请求中包含该身份验证 cookie。然后 machineKey 部分是处理 encryption/decryption 的部分。 两个站点必须具有相同的配置设置才能正常工作,并且在同一域上也是 运行,即 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>

编辑

使用以下 link 生成您的机器密钥:http://www.developerfusion.com/tools/generatemachinekey/