gpt4 book ai didi

asp.net - 在 ASP.NET 5 中跨子域共享身份验证 Cookie

转载 作者:行者123 更新时间:2023-12-04 18:04:59 26 4
gpt4 key购买 nike

我有两个 ASP.NET 5 MVC 6 应用程序。

一个运行在 www.mydomain.tld和一个在 world1.mydomain.tld .

如果用户登录 www 子域的应用程序,我希望她也登录 world1 子域的应用程序。登录是通过 ASP.NET Identity 3 实现的。

我已经在 Startup.cs 中设置了这两个应用程序如下:

public void ConfigureServices (IServiceCollection services) {
// [...]

services.AddCaching();
services.AddSession(
options => {
options.CookieDomain = ".mydomain.tld";
options.IdleTimeout = TimeSpan.FromMinutes(30);
}
);

// [...]
}

public void Configure (IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory) {
// [...]

app.UseCookieAuthentication(null, IdentityOptions.ExternalCookieAuthenticationScheme);
app.UseCookieAuthentication(null, IdentityOptions.TwoFactorRememberMeCookieAuthenticationScheme);
app.UseCookieAuthentication(null, IdentityOptions.TwoFactorUserIdCookieAuthenticationScheme);
app.UseCookieAuthentication(
config => {
config.CookieDomain = ".mydomain.tld";
},
IdentityOptions.ApplicationCookieAuthenticationScheme
);

// [...]
}

我还通过 web.config 设置了两个应用程序的机器 key 如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<machineKey decryption="AES"
decryptionKey="SOME DECRYPTION KEY"
validation="HMACSHA256"
validationKey="SOME ENCRYPTION KEY" />
</system.web>
</configuration>

登录 www 子域有效,但访问 world1 子域上的站点不起作用,因为身份验证 cookie 未被识别为有效的登录 cookie。

我究竟做错了什么?

最佳答案

应用程序是 automatically isolated从彼此。您需要确保三件事;

  • 他们使用相同的 key 存储
  • 它们使用相同的应用程序 ID。
  • 它们在同一个应用程序池中,或者每个池上的标识是相同的。

  • 在同一主机上运行的应用程序,在相同的托管机制下将使用相同的 keystore 。如果它们位于不同的机器上,您将需要在网络驱动器或其他共享位置(例如 azure blob 存储)上使用 key 存储。

    为了设置两个应用程序通用的应用程序 ID,您需要 configure数据保护堆栈。

    例如,
    public void ConfigureServices(IServiceCollection services)
    {
    services.AddDataProtection();
    services.ConfigureDataProtection(configure =>
    {
    configure.SetApplicationName("my application");
    });
    }

    如果您需要以不同的用户身份运行应用程序,那么您需要更改 key 的保护方式,以使用机器级 DPAPI 或 X509 证书。

    您不需要 web.config 中的机器 key 条目,机器 key 不再是用户。

    关于asp.net - 在 ASP.NET 5 中跨子域共享身份验证 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31476361/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com