Asp.net mvc 5 在MVC5中,有没有一种简单的跨域实现单点登录的方法

Asp.net mvc 5 在MVC5中,有没有一种简单的跨域实现单点登录的方法,asp.net-mvc-5,owin,Asp.net Mvc 5,Owin,情景: 两个独立的web项目,在这些域中运行: account.ilovepandes.com ilovepandas.com 使用ASP.Net Identity,MVC5中是否有一种简单的方法来实现共享登录,这样,如果用户登录到ilovepandes.com并转到account.ilovepandes.com,他就已经通过身份验证了 我对这个主题做了研究,有一些相当复杂的解决方案,比如Thinktecture、OWIN授权服务器。我的希望是,自从MVC4-5给了我们一个身份的大检修,也许

情景:

两个独立的web项目,在这些域中运行:

  • account.ilovepandes.com
  • ilovepandas.com
使用ASP.Net Identity,MVC5中是否有一种简单的方法来实现共享登录,这样,如果用户登录到ilovepandes.com并转到account.ilovepandes.com,他就已经通过身份验证了

我对这个主题做了研究,有一些相当复杂的解决方案,比如Thinktecture、OWIN授权服务器。我的希望是,自从MVC4-5给了我们一个身份的大检修,也许现在有一个更简单的解决方案,我只是没能找到


在我看来,这就像让他们共享auth cookie一样简单。

TL;DR:假设两个应用共享同一顶级域,您可以共享身份验证cookie。在cookie上设置域,并在应用程序之间共享解密域所需的任何密钥

在这里,我假设您正在使用FormsAuthentication

1) 将
domain
属性添加到
authentication/forms
部分:

<authentication mode="Forms">
  <forms loginUrl="~/account/login"
         timeout="2880"
         defaultUrl="~/"
         slidingExpiration="true"
         protection="All"
         domain=".yourdomain.tld"
         name="YOUR_COOKIE_NAME" />
你可以用这样的东西来拿钥匙:

var generator = new KeyGenerator();

/* 512 bits = 64 bytes (512 / 8) */
string validationKey = generator.GenerateKey(64);

/* 256 bits = 32 bytes (256 / 8) */
string decryptionKey = generator.GenerateKey(32);

非常感谢你的回答。但是,新的成员资格系统基于OWIN,而不是ASP.NET表单身份验证模块。因此,在表单身份验证中修改设置实际上不会起任何作用。还是我遗漏了什么?@Kjensen说实话,我不知道。我还没有一个项目需要我学习OWIN是如何工作的,因为我们所做的一切都是在IIS上托管的。我找到了一个解决方案,并将这个问题标记为重复。谢谢你的努力。:)本文概述的方法适用于:
public class KeyGenerator
{
    public string GenerateKey(int length, bool useUpperCase = true)
    {
        byte[] buffer = new byte[length];
        var randomNumberGenerator = new RNGCryptoServiceProvider();
        randomNumberGenerator.GetBytes(buffer);

        return ToHexString(buffer, true);
    }

    private static string ToHexString(byte[] bytes, bool useUpperCase = false)
    {
        var hex = string.Concat(bytes.Select(b => b.ToString(useUpperCase ? "X2" : "x2")));

        return hex;
    }
}
var generator = new KeyGenerator();

/* 512 bits = 64 bytes (512 / 8) */
string validationKey = generator.GenerateKey(64);

/* 256 bits = 32 bytes (256 / 8) */
string decryptionKey = generator.GenerateKey(32);