1

我有 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(userName, true,"我在站点 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

我已经按照 Kenneth 的建议更新了所有的 web.config。添加具有身份验证设置的相同机器密钥和域名

在营销站点中调用 create user 方法后,我应该尝试在那里设置 cookie 还是应该做其他事情?

4

2 回答 2

1

如果 2 个站点共享一个根域,即 site1.yourdomain.com 和 site2.yourdomain.com,您应该能够设置 machinekey 和共享域以允许两个站点访问身份验证票。

详情在这里。http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

于 2012-06-13T00:44:02.480 回答
1

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

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

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

于 2012-06-13T01:03:02.807 回答