#c# #asp.net-core
Вопрос:
Мне нужны два способа аутентификации: первый-с помощью jwt для мобильного приложения, второй-с помощью файлов cookie для администраторов. Я не понимаю, почему это не работает. Может быть, конфликт.
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options =gt; { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "some", ValidAudience = "some", IssuerSigningKey = signingDecodingKey.GetKey(), }; }) .AddCookie("Admin_Scheme", options =gt; { options.LoginPath = new PathString("/Admin/Auth/Login"); });
Но если я прокомментирую это:
services.AddAuthentication("Admin_Scheme") //.AddJwtBearer(options =gt; //{ // options.TokenValidationParameters = new TokenValidationParameters // { // ValidateIssuer = true, // ValidateAudience = true, // ValidateLifetime = true, // ValidateIssuerSigningKey = true, // ValidIssuer = "MobileTLServer", // ValidAudience = "MobileTLClient", // IssuerSigningKey = signingDecodingKey.GetKey(), // }; //}) .AddCookie("Admin_Scheme", options =gt; // конфигурации cookie аутентификации { options.LoginPath = new PathString("/Admin/Auth/Login"); });
Все отлично работает.
Я не понимаю, где я ошибся.
Это мой автосервис:
//default claims var claims = new Listlt;Claimgt; { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimsIdentity.DefaultNameClaimType, user.Name), new Claim(ClaimsIdentity.DefaultRoleClaimType, "Manager"), }; //Permissions var permissions = await _context.PermissonRoles .Include(pr =gt; pr.Permission) .Where(pr =gt; pr.IdRole == user.Role.Id) .Select(pr =gt; pr.Permission) .ToListAsync(); //Fill data foreach (var permission in permissions) { claims.Add(new Claim("Permission", permission.PermissionCode)); } var claimsIdentity = new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType); await HttpContext.SignInAsync("Admin_Scheme", new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddMinutes(60), IsPersistent = true });
Этот сайт хочет, чтобы я добавил больше информации, но я не знаю, что я могу добавить.
Комментарии:
1. Не могли бы вы уточнить, что именно не так? Может быть полезно предоставить подробную информацию об ошибках или описать ваше неправильное поведение
2. @AndrewSilver после входа в систему Пользователь объекта == NULL. Но если я прокомментирую участие JWT в запуске, все будет в порядке.
Ответ №1:
Согласно вашему описанию, я предполагаю, что вы не можете установить аутентификационные схемы атрибутов авторизации для файлов cookie, поскольку ваши схемы по умолчанию изменены на JWT, это означает, что если вы не определяете аутентификационные схемы, он будет использовать токен JWT. Если вы используете маркер cookie, он не будет работать.
Более подробную информацию о том, как настроить схемы авторизации аутентификации, вы можете найти в приведенных ниже кодах:
[Authorize( AuthenticationSchemes = "Admin_Scheme")] public class HomeController : Controller