C# 如何在子项目之间共享登录?

C# 如何在子项目之间共享登录?,c#,asp.net-mvc-4,login,C#,Asp.net Mvc 4,Login,我正在ASP.NETMVC4中实现一个应用程序,其中包含子项目,我希望这些应用程序共享相同的登录(只需登录一个应用程序,无需登录子项目) 对于webForms,我们通常使用机器键来完成,但在MVC4中,它不再工作了MVC 4中有任何新的解决方案吗?因为表单身份验证是通过表单身份验证票证来完成的,如果所有应用程序共享一个身份验证票证,则用户只需登录一次,因此是单次登录。假设我们有两个具有以下URL的应用程序: http://public.mysite.com/app1/default1.aspx

我正在ASP.NETMVC4中实现一个应用程序,其中包含子项目,我希望这些应用程序共享相同的登录(只需登录一个应用程序,无需登录子项目)


对于webForms,我们通常使用机器键来完成,但在MVC4中,它不再工作了MVC 4中有任何新的解决方案吗?

因为表单身份验证是通过表单身份验证
票证来完成的,如果所有应用程序共享一个身份验证票证,则用户只需登录一次,因此是单次登录。假设我们有两个具有以下URL的应用程序:

http://public.mysite.com/app1/default1.aspx
http://public.mysite.com/app2/default2.aspx
如您所见,它们基本上是同一子域下的两个虚拟目录-
public.mysite.com。
app1编写的cookie将在app2中可见,反之亦然

但是,这并不意味着当用户登录到app1时,他会自动登录到app2。原因是默认情况下,每个ASP.NET应用程序都使用自己的加密密钥来创建表单身份验证票证和cookie。因此,app2无法成功读取app1编写的cookie,即使它对app2可见

我们如何让这两个应用程序识别彼此的 身份验证票据和cookie

事实上,它在ASP.NET中非常简单。唯一需要做的是更改web.config文件元素中的设置。以下是machinKey的默认设置:

<machineKey 
validationKey="AutoGenerate,IsolateApps" 
decryptionKey="AutoGenerate,IsolateApps" 
validation="SHA1" 
decryption="Auto" 
/>
看看这个。
 public String CreateKey(int numBytes)
 {
 RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
 byte[] buff = new byte[numBytes];
 rng.GetBytes(buff);
 return BytesToHexString(buff);
 }

 private String BytesToHexString(byte[] bytes)
 {
 StringBuilder hexString = new StringBuilder(64);
 for (int counter = 0; counter < bytes.Length; counter++)
 {
     hexString.Append(String.Format("{0:X2}", bytes[counter]));
 }
 return hexString.ToString();
 }