.net core JWT API impliemntation на стороне клиента
поскольку я новичок в .Net Core, я столкнулся со следующей проблемой
У меня есть Authentication_API, который возвращает токен JWT контроллеру входа на стороне клиента. После успешного входа в систему я хочу перенаправить его на домашнюю страницу. Но когда я использую атрибут [Autherize] для контроллера, он не работает. Но без атрибута [Autherize] он отображает домашнюю страницу.
Пожалуйста, помогите мне, как решить эту проблему.
Я думаю, что не сохраняю токен в заголовке.
Я ссылок ниже API для проверки подлинности ,
http://jasonwatmore.com/post/2019/01/08/aspnet-core-22-role-based-authorization-tutorial-with-example-api
Вот мой генератор токенов
var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_appSettings.Secret); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, user.UserId.ToString()), new Claim(ClaimTypes.Role,user.Role.RoleNameE.ToString()) }), Expires = DateTime.UtcNow.AddDays(7), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); var tokenString = tokenHandler.WriteToken(token);
После этого момента я хочу перенаправить на домашнюю страницу
это моя стартовая страница
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); // Add ASPNETCore DBContext services. services.AddDbContext<Tejoury_MSContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DatabaseConnection"))); // configure strongly typed settings objects : abdulla var appSettingsSection = Configuration.GetSection("AppSettings"); services.Configure<AppSettings>(appSettingsSection); //--------------- configure jwt(JSON Web Tokens) authentication : abdulla --------------- 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.Events = new JwtBearerEvents { OnTokenValidated = context => { var userService = context.HttpContext.RequestServices.GetRequiredService<IUserService>(); var userId = int.Parse(context.Principal.Identity.Name); var user = userService.GetById(userId); if (user == null) { // return unauthorized if user no longer exists context.Fail("Unauthorized"); } return Task.CompletedTask; } }; x.RequireHttpsMetadata = false; x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false }; }); //---------------------------------------------------------------------- // configure DI for application services : Abdulla services.AddScoped<IUserService, UserService>(); services.AddAuthorization(options => { options.AddPolicy("RequireAdminRole", authBuilder => { authBuilder.RequireRole("Admin"); }); }); }
Что я уже пробовал:
Я хочу реализовать API аутентификации JWT в моем клиенте asp.net ядро applcaiton
это api, который я использую,
ASP.NET основной 2.2 - на основе ролей разрешения учебник с примерами блог по API | Джейсон Уотмор по [^]
Bohdan Stupak
Коды контроллера и то, что именно не работает, было бы полезно, Так как единственное предположение из вашего кода, которое у меня есть, - это то, что у вас есть опечатка в слове Authorize
Bryian Tan
Судя по тому, что вы описали, похоже, что токен на предъявителя не проверяется. Попробуйте отладить его, добавив OnAuthenticationFailed
OnAuthenticationFailed = context => { // Authentication failed }