我有两个站点,都在同一个域上,但具有不同的子域.
site1.mydomain.com site2.mydomain.com
一旦我对每个网站进行了身份验证,我会查看后续请求中包含的Cookie,并且每个网站的Cookie都相同.
但是,如果我登录到第一个站点,然后导航到另一个站点,我希望我的站点1的cookie与请求一起发送到site2,但事实并非如此.这是我的cookie的属性.
登录到Site1后,此cookie就存在
Name = MySite
Domain =
Has Keys = False
HttpOnly = False
Path = /
Value = 1C41854066B03D8CC5679EA92DE1EF427DAC65D1BA0E672899E27C57245C1F0B7E93AB01B5563363AB4815A8F4BDE9D293FD261E03F8E60B8497ABBA964D8D315CCE1C8DD220C7176E21DC361935CF6
Expires = 1/1/0001 12:00:00 AM
Run Code Online (Sandbox Code Playgroud)
登录到Site2后,这些cookie就存在了.
Name = MySite
Domain =
Has Keys = False
HttpOnly = False
Path = /
Value = C8C69F87F993166C4D044D33F21ED96463D5E4EB41E1D986BF508DA0CBD5C2CA7D782F59F3BC96871108997E899FF7401C0D8615705BDB353B56C7E164D2302EE6731F41705016105AD99F4E0578ECD2
Expires = 1/1/0001 12:00:00 AM
Run Code Online (Sandbox Code Playgroud)
我已经在每个域上设置了域(不会显示在请求cookie中,因为它只在客户端上需要).我确保我的每个表格设置都相同我确保我的机器密钥设置在两个网络配置中是相同的.
我不知道为什么这不起作用.什么是cookie包含客户端将它发送给一个子域而不是另一个子域,因为他们都使用相同的身份验证cookie到目前为止我可以告诉?
如果您想要查看更多信息,请发表评论.我已经在这两天苦苦挣扎了.根据这篇文章,这应该是有效的.
更新: 添加了代码
这是我的身份验证配置文件设置.这用于两个站点.
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn"
defaultUrl="~/Home/Index"
name="MySite"
protection="All"
path="/"
domain="mydomain.com"
enableCrossAppRedirects="true"
timeout="2880"
/>
Run Code Online (Sandbox Code Playgroud)
这是我在Site1中创建cookie的代码.
//Add a cookie that the Site2 …Run Code Online (Sandbox Code Playgroud) 我有一个webforms网站,正在调用我们正在开发的新MVC6网站.用户将使用表单身份验证在webforms网站上一直登录,然后重定向到新的MVC6网站.我知道在MVC6中我应该使用Cookie身份验证,但无法让它解密cookie.我怀疑它是关于web.config和machinekey的变化,但我真的被卡住了.
这就是我所做的.
我已按如下方式设置了cookie身份验证
app.UseCookieAuthentication(options =>
{
options.CookieName = "MyWebformsCookie";
options.AutomaticAuthenticate = true;
options.AuthenticationScheme = "Cookies";
options.TicketDataFormat = new MySecureDataFormat();
options.DataProtectionProvider = new MyDataProtectionProvider();
//options.CookieDomain = "localhost";
});
Run Code Online (Sandbox Code Playgroud)
课程如下
public class MySecureDataFormat : ISecureDataFormat<AuthenticationTicket>
{
public string Protect(AuthenticationTicket data)
{
return string.Empty;
}
public string Protect(AuthenticationTicket data, string purpose)
{
return string.Empty;
}
public AuthenticationTicket Unprotect(string protectedText)
{
return null;
}
public AuthenticationTicket Unprotect(string protectedText, string purpose)
{
var ticket = FormsAuthentication.Decrypt(protectedText);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
正在读取cookie,并调用Unprotect方法,但随后在FormsAuthentication.Decrypt方法上出现错误并出现错误
System.Web.dll中出现"System.Web.HttpException"类型的异常,但未在用户代码中处理
其他信息:无法验证数据.
Stack = …
在实现基于子域的语言切换器时遇到障碍(en.domain.com加载英语,jp.domain.com加载日语).
如何让单个成员资格系统跨多个子域工作(ASP.NET MVC C#)?
看到一些有关添加domain="domain.com"到<forms >web.config中的条目.这样做了,但是在本地visual studio开发Web服务器上进行测试时是否可行?