abdu_karami Ответов: 0

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

0 Ответов