我有一个网页,它为同一个应用程序使用多个URL:
例如:* .MyWebPage.com.au * .YourWebPage.com.au
因此它将在多个网址上使用子域名 . 问题是我需要允许用户在他们登录的URL的所有子域上进行身份验证 .
例如,如果他们通过www.mywebpage.com.au登录,则需要为* .mywebpage.com.au设置cookie,或者如果他们通过www.yourwebpage.com.au登录,则cookie应为* .yourwebpage.com . AU .
允许ASP.NET核心标识的子域的大多数文档都指向startup.cs(或startup.auth.cs)文件并输入如下内容:
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
CookieDomain = "mywebpage.com.au"
});`
这对我不起作用,因为我不想要一个固定的域名,我只想让所有用户都可以访问他们登录的URL的所有子域名 . 我可以通过请求显然在登录时获取他们的URL,但我需要动态设置cookiedomain .
4 回答
我开始时没想到的是Identity和CookeieAuthentication之间的区别 . 因为我使用的是身份
app.UseCookieAuthentication不是解决方案 .
我终于通过实现ICookieManager找到了我的解决方案 .
这是我的解决方案:
在Startup.cs中:
现在我在一个叫做CookieManager.cs的类中:
除了@ michael的解决方案:
ICookie
:ICookie Interface
是http cookie object
之上的抽象层,它保护data
.ICookieManager
:Cookie Manager
是ICookie Interface
之上的抽象层 . 这扩展了Cookie行为的<TSource>
泛型支持,Func<TResult>
. 这是由DefaultCookieManager
类实现的 .ICookie Interface
是这个类的衍生物 .CookieManager
的用法:在启动时添加
CookieManager
配置服务 .访问CookieManager API .
源代码在
git
上由Nemi Chand提供 .有多少主要域名?如果没有太多,可以添加几个CookieAuthenticationOptions . 像这样:
如果主域太多,您需要编写自己的cookie提供程序 .
除了@ michael的回答:如何“处理deletecookie事件,添加options.Domain = RemoveSubdomain(context.Request.Host.Host)”:只需添加
之前
在
CookieManager.DeleteCoockie(..);
并且不要忘记在注销时调用CookieManager.DeleteCoockie!
PS此外,如果您需要能够在subdomain.example.com和example.com上同时登录 - 您需要修改AppendResponseCookie(..),否则您将只获得TLD(.com / .ru)等)这里