#c# #asp.net #authentication #razor-pages
#c# #asp.net #аутентификация #razor-страницы
Вопрос:
Приложение разработано на страницах Razor ASP.NET Ядро
Я регистрирую пользователя через LDAP таким образом:
public async Task<IActionResult> OnPostAsync()
{
var user = authService.Login(UserName, Password);
if (null != user)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, UserName),
};
ClaimsIdentity identity = new ClaimsIdentity(claims, "Cookies", "user", "role");
await HttpContext.SignInAsync(new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookies", "user", "role")));
}
else
{
return Unauthorized();
}
return Redirect("~/Index");
}
И вот как выглядит Startup.cs
services.Configure<LdapConfig>(Configuration.GetSection("Ldap"));
services.AddScoped<IAuthenticationService, LdapAuthenticationService>();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
options.LoginPath = "/Account/SignIn";
});
services
.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "TicketTracker.ldap.identity";
options.Cookie.HttpOnly = true;
options.Cookie.Expiration = TimeSpan.FromDays(150);
options.LoginPath = "/Account/Signin"; // If the LoginPath is not set here, ASP.NET Core will default to /Account/Login
options.LogoutPath = "/Account/Signout"; // If the LogoutPath is not set here, ASP.NET Core will default to /Account/Logout
options.AccessDeniedPath = "/Account/AccessDenied"; // If the AccessDeniedPath is not set here, ASP.NET Core will default to /Account/AccessDenied
options.SlidingExpiration = true;
options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
});
С аутентификацией все работает нормально, но я не могу получить доступ к имени текущего пользователя, который вошел в систему.
Кто-нибудь знает, что делать?
Спасибо!
Ответ №1:
Проблема решена самостоятельно, спасибо за помощь!
options.Cookie.Name = "TicketTracker.ldap.identity";
Это было в этой строке, я просто заменяю его на
options.Cookie.Name = ".AspNetCore.Cookies";
Потому что имя файла cookie создается с помощью идентификатора утверждения, который я передаю через метод SignInAsync.
Теперь все работает нормально.