C# 如何在子项目之间共享登录?
我正在ASP.NETMVC4中实现一个应用程序,其中包含子项目,我希望这些应用程序共享相同的登录(只需登录一个应用程序,无需登录子项目)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
对于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();
}