我正在尝试为一些依赖表单身份验证以确保其安全性的旧应用程序生成新的登录系统。新的登录系统使用ASP.NET核心。
据我所知,新的登录系统正在运行。最终结果是使用.ASPXAUTH cookie重定向到所需的页面。但是,IIS不喜欢该cookie。它总是直接重定向回登录页面。
我已经检查了cookie的路径和寿命,它们很好。我编写了一个HttpModule来记录IIS中发生的情况,并且看来cookie内容无效。当我尝试使用FormsAuthentication.Decrypt解密内容时,它将引发异常:“'encryptedTicket'参数的值无效。”
我正在像这样配置登录服务的身份验证:
services.
AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = IISDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.Cookie.Name = ".ASPXAUTH";
options.Cookie.Path = "/";
options.Cookie.MaxAge = System.TimeSpan.FromDays(1);
})
这就是我用来在登录服务中生成表单凭单的原因:
var claims = new Claim[] { new Claim(ClaimTypes.Name, userId) };
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var properties = new AuthenticationProperties
{
IsPersistent = true,
RedirectUri = returnUrl,
};
HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(identity),
properties).Wait();
要尝试检查HttpModule中的票证,我这样做:
string aspxauth = null;
try
{
aspxauth = application.Context.Request.Cookies[".ASPXAUTH"].Value;
writer.WriteLine($"\t.ASPXAUTH: {aspxauth}");
}
catch (Exception ex)
{
writer.WriteLine($"\tERROR: The .ASPXAUTH cookie could not be read: {ex.Message}");
return;
}
有人知道为什么IIS无法解密我的票吗?