【问题标题】:How To Pass UserIdentity/UserName From WebForm application to MVC5 Application?如何将用户身份/用户名从 WebForm 应用程序传递到 MVC5 应用程序?
【发布时间】:2015-02-11 21:51:58
【问题描述】:

我有一个 asp.net 网络表单应用程序 (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”?或者,根本不使用域?好像不行。

2) 我在 ProA 上添加了一个按钮,点击后,使用此重定向到 ProB:

HttpContext.Current.Response.Redirect("http://localhost:12345/", false);

这是正确的方法吗? HttpContext 具有用户身份。

3) ProB 是否必须拥有会员资格?现在ProB没有会员功能,是这个原因吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    主要需要注意的是domain 引用和machineKey 配置。 表单身份验证配置的 domain 属性允许浏览器将该身份验证 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/

    【讨论】:

    • 感谢您的回复。但是,我有一些问题,请参阅原始问题的底部。
    • 1.使用localhost 作为域应该可以工作,如果不是,我建议将 2 个站点部署到您的开发机器上的 IIS,类似于它们在生产中的方式。 2. 使用该机制进行重定向就可以了。 3. 你如何测试它在 ProB 应用程序中的工作?
    • 终于想通了。实际上,由于它在同一台机器上(开发或生产服务器),我们不应该使用域属性。如果使用它,将无法正常工作。谢谢。
    猜你喜欢
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多