在一个网站上为另一个站点创建一个 asp.net 身份验证的 Cookie

本文关键字:一个 net asp 身份验证 Cookie 创建 网站 另一个 站点 | 更新日期: 2023-09-27 18:36:54

我有 3 个 mvc4 站点。站点 1"www.mydomain.com"是一个允许用户创建帐户的营销网站。

站点 2"https://businessnamewhatever.mydoman.com"用于企业登录并使用可用功能。

站点 3 WebApi 项目 'https://api.mydomain.com'

在市场营销网站中创建帐户(通过调用webapi创建帐户)后,我想将它们重定向到第二个站点,自动登录它们。

这两个站点都具有表单身份验证设置,并且都使用在 web.config 身份验证部分中设置的自己的 cookie 名称

在我的营销网站中调用 api 后,我需要设置允许用户自动登录网站 2 的身份验证 cookie

我以为这只是从我的营销网站中使用的一个案例

FormsAuthentication.SetAuthCookie(用户名,true,"site 2 上的 cookie 名称");

我的第二个想法是做一个肮脏的重定向,比如

   var url = string.Format("https://{0}.mydomain.com/account/sign-in?userName={1}&password={2}", model.BusinessName, model.BusinessName, model.Password);
   return Redirect(url);

但是,重定向永远不会发生。在网络选项卡中查看,我可以看到响应,如果我单击它,我会正确重定向到该站点。

有没有更好的方法可以做到这一点?

更新

不好意思!我忘了提到我有一个第三个应用程序作为我的 API 工作

我已经按照肯尼斯的建议更新了所有 web.config。 使用身份验证设置添加相同的计算机密钥和域名

在市场营销网站中调用创建用户方法后,我应该尝试在那里设置 cookie 还是应该执行其他操作?

在一个网站上为另一个站点创建一个 asp.net 身份验证的 Cookie

首先,我假设两个产品都在不同的域上(否则你可以参考@Kenneth的答案),你可以对两个站点的源代码进行更改。

  • 在市场营销网站上创建帐户后,从服务器端向业务站点发送 POST(使用 SSL 以确保安全),其中包含用户名、密码哈希和重定向回市场营销 URL。
  • 业务站点存储这些值(根据需要),然后使用用于重定向客户端浏览器的一次性 URL 进行响应,该 URL 仅在短时间内(例如 1 或 2 分钟)有效。
  • 市场营销网站将该 URL 作为 302 重定向发送到客户端。
  • 客户端浏览器重定向到业务站点。
  • 业务站点将验证 URL,确保它未过期。
  • 业务网站将浏览器重定向回重定向回市场营销 URL。在此响应中包含任何身份验证 Cookie。

如果发生验证错误(例如超时或参数无效),则业务网站应重定向到市场营销网站上的预定义 URL。

如果 2 个站点共享一个根域、IE site1.yourdomain.com 和 site2.yourdomain.com,您应该能够设置计算机密钥和共享域,以便允许两个站点访问身份验证票证。

详情请点击此处。http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx