Ich entwickle eine Anwendung mit ASP.NET Core und ich benutze eine benutzerdefinierte Cookie-Authentifizierung. Meine CookieAuthenticationOptions
sind:ASP.NET Core Authentifizierung Cookie nur einmal empfangen
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme,
LoginPath = new PathString("/login"),
AccessDeniedPath = new PathString("/unauthorized/"),
AutomaticAuthenticate = true,
AutomaticChallenge = true
});
Das Cookie einfach gut angelegt, und ich kann es in den Browser-Einstellungen während der gesamten Zeit sehe ich die Anwendung leite. Das ist meine HomeController
Klasse:
public HomeController(IHostingEnvironment env,
IAntiforgery antiforgery,
IOptions<AppSettings> appSettings,
TerminalDbContext terminalContext,
ILoggerFactory loggerFactory,
IHttpContextAccessor _httpContextAccessor)
{
_env = env;
_antiforgery = antiforgery;
_appSettings = appSettings;
_terminalContext = terminalContext;
_logger = loggerFactory.CreateLogger<HomeController>();
_httpContext = _httpContextAccessor.HttpContext;
_logger.LogInformation("Cookie coming");
var cookies = _httpContext.Request.Cookies[".AspNetCore.Cookies"];
if (cookies != null)
{
_logger.LogInformation(cookies.Length.ToString());
_logger.LogInformation(cookies.ToString());
}
else
{
_logger.LogInformation("THE COOKIE IS NULL");
}
}
Und das ist, wie ich in den User an:
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, loginInfo.Username),
new Claim("DbName", loginInfo.Terminal.SesamDbName),
};
var userIdentity = new ClaimsIdentity(claims, "password");
ClaimsPrincipal principal = new ClaimsPrincipal(userIdentity);
await _httpContext.Authentication.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
ich die Anwendung leite und mehr Instanzen der HomeController
erstellt werden, da ich HttpGet
habe Methoden, die eine JsonResult
zurückgeben, die für die Ansicht benötigt wird.
Wenn die Anwendung zum ersten Mal versucht, [Authorize]
(für die Index()
-Methode), findet es den Cookie und authentifiziert und autorisiert fein. Das zweite Mal versucht es [Authorize]
(für eine HttpGet
Methode, die eine JsonResult
zurückgibt) es findet den Cookie nicht, obwohl es dort in den Einstellungen meines Browsers ist. Dies ist das Protokoll, das ich erhalte, um dies zu veranschaulichen:
...
info: Server.Controllers.HomeController[0]
Cookie coming
info: Server.Controllers.HomeController[0]
347
info: Server.Controllers.HomeController[0]
CfDJ8GSLZENXaNpNrtmz2DAt9joqJ6CEHpCFbJdbNxbQYjjoQmd4naOI0L0krNMSQdVhqPRP9tJJMMIRayc5ILRQMcJQWNZ0T9Fjuk7Qxg65wPP7SR43UZxwy6vGQ7_qeSp44gYLLe4NGEalhXynZxmD-jywqL4VJZ5y4OwpsEKLx-VVT03xAlt54J_qQk_O4wjwLQiZBpAVTFKUWN4u7H8yd_rwMTIGBPu21t5n35To9bTQU5677xNxiEFap3ukuxO4p-OxVakXqShy2Xk_vYDAvv_XFV6jgNcy4ZiCRB8VUhXGcNr205h4X0-O7JHB8mYbc13aZLmrAwvG5DWTBd3_OCo
...
info: Server.Controllers.HomeController[0]
Cookie coming
info: Server.Controllers.HomeController[0]
THE COOKIE IS NULL
Warum passiert das? Was kann ich tun?
Sind Sie sicher, dass Sie die Anfrage über HTTPS in beiden Fällen stellen? –
Wie überprüfe ich das? –
Ich habe herausgefunden, was das Problem war, danke für die Hilfe, ich werde bald eine Antwort posten. –