Я учусь использовать аутентификацию токена JWT в ASP. У меня есть простой веб-сайт с операциями CRUD и репозитарием, я добавил функциональность регистрации / входа в систему, и у меня есть одна роль «Администратор», которая является суперпользователем. Обычно, вот как я проверяю, вошел ли пользователь в систему с правами администратора:
bool admin = User.IsInRole(Constants.ADMIN_ROLE);
Эта функция работала нормально, пока я не добавил аутентификацию JWT в свое приложение. Теперь, входя в систему с моей учетной записью администратора (добавленной в БД вручную), я никогда не получаю правильное значение. Когда я пытаюсь запросить пользователя, я получаю NULL:
var user = await _userManager.GetUserAsync(HttpContext.User)
Это мои ConfigureServices в Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddIdentity<MyUser, MyRole>()
.AddEntityFrameworkStores<MyContext>()
.AddRoles<MyRole>();
services.AddDbContext<MyContext>(builder =>
{
builder.UseSqlServer(Configuration["ConnectionStrings"]);
});
// repo code here ommitted for clarity
var appSettingsSection = Configuration.GetSection("AppSettings");
services.Configure<AppSettings>(appSettingsSection);
var appSettings = appSettingsSection.Get<AppSettings>();
var key = Encoding.ASCII.GetBytes(appSettings.Secret);
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = true,
};
});
}
И это мой класс Configure:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseMvc();
app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
}
Не было понимания, что, поскольку JWT является аутентификацией, это никак не должно влиять на авторизацию, поэтому я думаю, что забыл использовать некоторые дополнительные опции, но не могу найти что. Любая помощь приветствуется!