asp.net-core – asp.net核心身份中的多个SubDomain的cookie
|
我有一个网页,它为同一个应用程序使用多个URL: 例如: 因此它将在多个网址上使用子域名.问题是我需要允许用户在他们登录的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. 解决方法我开始时没想到的是Identity和CookeieAuthentication之间的区别.因为我使用的是身份 app.UseIdentity(); app.UseCookieAuthentication不是解决方案. 我终于通过实现ICookieManager找到了我的解决方案. 这是我的解决方案: 在Startup.cs中: services.AddIdentity<ApplicationUser,IdentityRole>(options =>
{
options.Password.RequireDigit = false;
options.Password.RequiredLength = 5;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireLowercase = false;
options.Password.RequireUppercase = false;
options.Cookies.ApplicationCookie.CookieManager = new CookieManager(); //Magic happens here
}).AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
现在我在一个叫做CookieManager.cs的类中: public class CookieManager : ICookieManager
{
#region Private Members
private readonly ICookieManager ConcreteManager;
#endregion
#region Prvate Methods
private string RemoveSubdomain(string host)
{
var splitHostname = host.Split('.');
//if not localhost
if (splitHostname.Length > 1)
{
return string.Join(".",splitHostname.Skip(1));
}
else
{
return host;
}
}
#endregion
#region Public Methods
public CookieManager()
{
ConcreteManager = new ChunkingCookieManager();
}
public void AppendResponseCookie(HttpContext context,string key,string value,CookieOptions options)
{
options.Domain = RemoveSubdomain(context.Request.Host.Host); //Set the Cookie Domain using the request from host
ConcreteManager.AppendResponseCookie(context,key,value,options);
}
public void DeleteCookie(HttpContext context,CookieOptions options)
{
ConcreteManager.DeleteCookie(context,options);
}
public string GetRequestCookie(HttpContext context,string key)
{
return ConcreteManager.GetRequestCookie(context,key);
}
#endregion (编辑:日照站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何通过ASP.NET中的另一个下拉列表过滤下拉列表值,c#
- asp.net-mvc-3 – 将数组传递给RouteValues,并将其渲染为粘
- asp.net-mvc – 从Asp.Net Mvc应用程序找不到DataContractJ
- asp.net core 实现一个简单的仓储的方法
- asp.net-mvc – MicrosoftMvcValidation.js VS jquery.vali
- asp.net-mvc – 如何通过URL传递日期,为我的Action读取MVC?
- asp.net-mvc – 当Bundling EnableOptimizations为true时,F
- 转:[WebServices]介绍
- asp.net-core – 我为什么要选择带有.Net核心的ASP.NET Cor
- asp.net – 当我试图强制401时,自定义授权过滤器总是返回40
- asp.net – 以纯文本识别URL
- NHibernate中关于Inverse的理解和使用
- ASP.NET代码隐藏中的当前工作目录 – 我们可以依
- asp.net-mvc-3 – 如何在页面提交ASP.Net MVC时捕
- asp.net – Orchard CMS Media中的文件大小上传限
- asp.net-mvc – ASP.NET MVC 2预览2:区域重复控
- asp.net-mvc – ASP.NET MVC运行IIS7部署问题
- asp.net – 什么时候Response.IsClientConnected
- asp.net-mvc-4 – 没有为此对象定义的无参数构造
- asp.net – @ Url.Action在控制器中创建空值的参
