После входа пользователя.Идентификатор.Имя пустое, но пользователь.Идентификатор.IsAuthenticated установлен правильно

#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.

Теперь все работает нормально.