ошибка при входе в систему с использованием app.UseCookieAuthentication с помощью customjwtdataformat, MVC ASPNET

#asp.net-mvc #asp.net-core-mvc #jwt

#asp.net-mvc #asp.net-core-mvc #jwt

Вопрос:

Я настраиваю аутентификацию для своего приложения MVC и приложения MVC web api с использованием аутентификации cookie. вот код startup.cs моего приложения Mvc.

   public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        var secretKey = "esssecret_secretkey!@#$";
        var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey));

        var tokenValidationParameters = new TokenValidationParameters
        {
            // The signing key must match!
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = signingKey,

            // Validate the JWT Issuer (iss) claim
            ValidateIssuer = true,
            ValidIssuer = "essIssue",

            // Validate the JWT Audience (aud) claim
            ValidateAudience = true,
            ValidAudience = "essAudi",

            // Validate the token expiry
            ValidateLifetime = true,

            // If you want to allow a certain amount of clock drift, set that here:
            ClockSkew = TimeSpan.Zero
        };

        loadServerLink();

        app.UseCookieAuthentication(options =>
        {

            options.AutomaticAuthenticate = true;
            options.AutomaticChallenge = true;
            options.AuthenticationScheme = "CookieAuthHRMS";              

            options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
            options.SlidingExpiration = true;

            options.LoginPath = new Microsoft.AspNet.Http.PathString("/Account/Login");
            options.LogoutPath = new Microsoft.AspNet.Http.PathString("/Account/Logout");
            options.AccessDeniedPath = new Microsoft.AspNet.Http.PathString("/Account/AccessDenied");

        });

        app.UseIISPlatformHandler();

        app.UseMvc(ConfigureRoutes);

        app.UseStaticFiles();

        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Hello World -----!");
        });            
    }
 

вот мой код входа в контроллер. и это было нормально.

частная асинхронная задача SignInAsync(пользователь ApplicationUser, bool IsPersistent) { ожидает HttpContext.Аутентификация.SignOutAsync(«CookieAuthHRMS»);

         var Cidentity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, user.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);

        List<Claim> userClaims = new List<Claim>
        {               
            new Claim("userId",user.UserId.ToString()),
            new Claim("EmployeeId",user.EmployeeID),
            new Claim(ClaimTypes.Name, user.UserName),                
        };

        ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims,DefaultAuthenticationTypes.ApplicationCookie));


        await HttpContext.Authentication.SignInAsync("CookieAuthHRMS", principal);

    }
 

После добавления двух строк кода в app.UseCookieAuthentication(). мой логин не перенаправляется на Home / Index.

   options.CookieName = "access_token";
  options.TicketDataFormat = new CustomJwtDataFormat(SecurityAlgorithms.HMAC_SHA256, tokenValidationParameters);
 

Вот мой код контроллера:

    [HttpPost]
    [AllowAnonymous]
    public async Task<IActionResult> Login(LoginViewModel lgvm)
    {
        if (ModelState.IsValid)
        {
            var user = await _userManager.FindAsync(lgvm.UserName, lgvm.Password);
            string resu<
            if(user!= null)
            {                    
                await SignInAsync(user, lgvm.RememberMe); //Just stop here and not continue to next line
                return RedirectToAction("Index", "Home");
            }
        }

        return RedirectToAction("AccessDenied","Account");
    }
 

Хорошо, моя ошибка заключается в том, что я продолжаю ждать «await SignInAsync (user, lgvm.RememberMe);» и не продолжаю «return RedirectToAction («Index», «Home»);».

Это справочная ссылка для создания пользовательского формата данных jwt: https://stormpath.com/blog/token-authentication-asp-net-core

Лучшие Rgds, лягушка

Комментарии:

1. Похоже, вы не говорите, в чем на самом деле заключается ошибка

2. Кроме того, почему вы хотите использовать JWT для файла cookie?

3. только что обновил свой вопрос. на самом деле компилятор переключается на «await SignInAsync(user, lgvm.RememberMe);» и не продолжает » return RedirectToAction («Index», «Home»);». Я хочу поделиться файлами cookie между веб-приложением и приложением Web Api. для JWT я просто хочу попробовать, вот почему я его использовал

4. Что-то в вашем отформатированном билете убивает его.