如何将 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/
我有一个 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/