在1个站点上为另一个站点创建一个asp.net认证cookie

时间:2012-06-13 00:21:24

标签: c# asp.net-mvc asp.net-membership

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

站点2'https://businessnamewhatever.mydoman.com'用于公司登录并使用可用功能。

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

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

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

在调用api后我的营销网站中我需要设置auth cookie,以允许用户自动登录到站点2

我认为这只是在我的营销网站中使用

的情况

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);

然而重定向永远不会发生。查看网络选项卡,我可以看到响应,如果点击它,我会被正确地重定向到网站。

有更好的方法吗?

更新

SORRY!我忘了提到我有第三个应用程序作为我的API

我已根据Kenneth的建议更新了所有web.config。使用身份验证设置添加相同的计算机密钥和域名

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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