ASP.NET Core 使用(Json Web Token)JWT 来验证会话

问题描述 投票:0回答:0

我正在尝试将 JWT 身份验证添加到我的 Razor Page Web 应用程序中。我希望用户输入他的电子邮件地址,然后检查该电子邮件是否存在于我的数据库中。如果地址存储在数据库中,我想创建一个令牌并将其存储在会话中。

我在 stackoverflow/youtube/internet 上没有找到任何关于如何使用 razorpages 实现类似功能的内容。那么你有什么想法我可以如何使用剃刀页面进行设置吗?

我尝试遵循一些教程,但没有真正解决问题。

1。我的program.cs是这样配置的。

services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
        }).AddJwtBearer(o =>
        {
            o.RequireHttpsMetadata = false;
            o.SaveToken = true;
            o.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["JwtSettings:Key"])),
                ValidateIssuer = true,
                ValidIssuer = configuration["JwtSettings:Issuer"],
                ValidateAudience = false,
                ValidateLifetime = true,
            };
        });

        services.AddAuthorization();

2。我的帖子方法在按下登录按钮后被调用,如下所示。在这个方法中,我想将令牌存储在会话或cookie中。

        public async Task<IActionResult> OnPost()
        {   
            await _loginRepository.CreateToken(Email);
//TODO store token here
            return RedirectToPage("/Picture/Index");
        }

检查电子邮件是否存在后,我将生成一个令牌,然后重定向到受

[Autroize(Roles = "Admin")]
保护的页面。

  1. 我的代币生成

    public async Task<bool> CreateToken(string email, CancellationToken cancellationToken = default)
     {
         var journalists = await _zentralContext.v_PressInfo_Journalisten.Select(s => s.Email).ToListAsync();
         if (journalists.Contains(email))
         {    
             var journalist = await _zentralContext.v_PressInfo_Journalisten.Where(w => w.Email == email).FirstAsync();
             var token = CreateToken(email);
             //Store Token here??
             return true;
         }
         else
         {
             return false;
         }
     }
    
    
     private string CreateToken(string email)
     {
         var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("TheSecretKeyNeedsToBePrettyLongSoWeNeedToAddSomeCharsHere"));
         var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
    
         var claims = new[]
         {
             new Claim(ClaimTypes.Email, email),
             new Claim(ClaimTypes.Role, "Admin")
         };
         var token = new JwtSecurityToken(
             issuer: "Presseinfo Extern",
             claims: claims,
             expires: DateTime.Now.AddDays(1),
             signingCredentials: creds);
         return new JwtSecurityTokenHandler().WriteToken(token);
     }
    
asp.net-core authentication jwt authorization razor-pages
© www.soinside.com 2019 - 2024. All rights reserved.