36-应用Jwtbearer Authentication

新建.net core webapi项目

E:\coding\netcore>dotnet new webapi --name JwtAuthSample

创建需要用到的实体对象类

namespace JwtAuthSample.Models
{
    public class JwtSettings{
        //发现者
        public string Issure{get;set;}
        //使用者
        public string Audience{get;set;}
        //jwt使用的密码
        public string SecretKey {get;set;}

    }
}

在appsettings.json 中增加映射到实体类JwtSettings的配置文件

"JwtSettings":{
    "Issure":"http://localhost:5000",
    "Audience":"http://localhost:5000",
    "SecretKey":"123456789@byd@33311fasdfsad"
  }

 

在StartUp.cs方法ConfigureServices中配置如下代码,用于Jwt验证

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));
            var jwtSetting =  new JwtSettings();
            Configuration.Bind("JwtSettings",jwtSetting);

            services.AddAuthentication(options=>{
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(jwtOption=>{
                jwtOption.TokenValidationParameters=new Microsoft.IdentityModel.Tokens.TokenValidationParameters{
                    ValidIssuer = jwtSetting.Issure,
                    ValidAudience = jwtSetting.Audience,
                    IssuerSigningKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(
                        System.Text.Encoding.UTF8.GetBytes(jwtSetting.SecretKey)
                    )
                };
            });
        }

为了让受权生效,需要在Configure启用授权

 

接下来测试授权有没有生效

需要在要授权的类或方法上加下[Authorize]特性

 

 

通过测试器访问 http://localhost:5000/api/values/ ,会出出现401未授权错误

 

转载于:https://www.cnblogs.com/qinzb/p/9351774.html

在ASP.NET Core 8.0 MVC Razor Web应用程序中使用JWTJSON Web Tokens)进行登录验证主要涉及以下几个步骤: 1. 添加JWT包依赖:首先需要在项目中添加用于处理JWT的包,如`Microsoft.AspNetCore.Authentication.JwtBearer`。这可以通过NuGet包管理器来完成。 2. 配置JWT认证服务:在`Startup.cs`的`ConfigureServices`方法中配置JWT认证服务。设置JWT的签名密钥、令牌验证参数等。 ```csharp services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])) }; }); ``` 3. 授权控制器或动作:在需要保护的控制器或动作上添加`[Authorize]`属性,这样只有通过JWT认证的用户才能访问。 ```csharp [ApiController] [Route("[controller]")] [Authorize] public class WeatherForecastController : ControllerBase { // ... } ``` 4. 生成JWT令牌:在用户成功登录后,根据登录信息生成JWT令牌。这通常在登录接口的处理逻辑中完成。 ```csharp var claims = new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()), new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName), // ... 其他声明 }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: Configuration["Jwt:Issuer"], audience: Configuration["Jwt:Audience"], claims: claims, expires: DateTime.Now.AddMinutes(30), signingCredentials: creds); return Ok(new { Token = new JwtSecurityTokenHandler().WriteToken(token) }); ``` 5. 在客户端发送请求时,将生成的JWT令牌放在请求头中。 ```http Authorization: Bearer <token> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值