.NET WebAPI 运用JWT鉴权授权

1:引用需要的程序集 :System.IdentityModel.Token.JWT

2:创建一个新的控制器,用于授权功能

using Demo.APIDbcontext;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Cors;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;

using System.Security.Claims;
using System.Text;

namespace Demo.Controllers
{
    [Route("api/[controller]/[Action]")]
    [ApiController]
    public class JWT : ControllerBase
    {
        private readonly IConfiguration _configuration;   //注入钥匙

        private readonly BloggingContext _context;  //EF框架注入依赖
        public JWT(BloggingContext context, IConfiguration configuration)
        {
            _context = context;
            _configuration = configuration;
        }

        [HttpPost]
        public IActionResult Login(string username, string pwd)
        {
            //var writerInfo =  _context.Users.Find(username);
            //使用EF与数据库交互获取用户信息
            //验证密码
            if (username == "1") 
            //writerInfo != null && writerInfo.pwd == int.Parse(pwd) 验证数据库内的密码                     
            {
                //登录成功
                //header
                var signingAlgorithm = SecurityAlgorithms.HmacSha256;
                //payload 
                var claims = new Claim[] {
                    new Claim(JwtRegisteredClaimNames.Sub,"qq"), 
                    new Claim("Id","1"),
                    new Claim("UserName","admin")
                    //qq  1  admin为模拟信息,实际情况通过前面的EF框架查询数据库信息后插入
                };
                //signiture
                var secretByte = Encoding.UTF8.GetBytes(_configuration["Authentication:SecretKey"]);
                var signingKey = new SymmetricSecurityKey(secretByte);
                var signingCredentials = new SigningCredentials(signingKey, signingAlgorithm);
                var token = new JwtSecurityToken(
                    issuer: "xiechengwang",//谁发布  输入网址或者localhost:这类
                    audience: "xiechengwang",//发布给谁   输入网址或者localhost:这类
                    claims: claims,
                    notBefore: DateTime.Now,
                    expires: DateTime.Now.AddDays(1),
                    signingCredentials //字符串签名
                    );
                var tokenStr = new JwtSecurityTokenHandler().WriteToken(token);
                return Ok(tokenStr);
            }
            else 
            {
                return BadRequest();
            }
            


        }


    }


}

3:服务中进行注册

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                    .AddJwtBearer(option =>
                    {
                        
                        option.TokenValidationParameters = new TokenValidationParameters
                        {
                            ValidateIssuerSigningKey = true,
                            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SDMC-CJAS1-SAD-DFSFA-SADHJVF-VF")),
 //SDMC-CJAS1-SAD-DFSFA-SADHJVF-VF为密钥                          
                            ValidateIssuer = true,
                            ValidIssuer = "xiechengwang",
                            
                            ValidateAudience = true,
                            ValidAudience = "xiechengwang",
                            
                            ValidateLifetime = true,

                            ClockSkew = TimeSpan.FromDays(1)
                        };
                    });

4:启动鉴权授权

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseAuthentication();//鉴权
app.UseAuthorization();//授权

app.MapControllers();

app.Run();

5:在需要的鉴权授权的API  中调用

        [Authorize]//需要
        [AllowAnonymous]//不需要
        [HttpGet]
        public Users? GetUsers() 

        {
        
        }

6:发送请求接口时候  请求头 {Authorzation:"bearer"+空格 + token}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用.NET 6 Web API进行JWT授权鉴权的示例代码: 1. 首先,安装所需的NuGet包: ``` dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer dotnet add package System.IdentityModel.Tokens.Jwt ``` 2. 在Program.cs文件中进行配置: ```csharp using Microsoft.IdentityModel.Tokens; var builder = WebApplication.CreateBuilder(args); // 添加JWT认证服务 builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "your_issuer", // 发行者 ValidAudience = "your_audience", // 受众 IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key")) // 密钥 }; }); // 注册授权策略 builder.Services.AddAuthorization(); builder.Services.AddControllers(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run(); ``` 3. 创建一个控制器来处理认证请求: ```csharp using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using Microsoft.IdentityModel.Tokens; [ApiController] [Route("api/[controller]")] public class AuthController : ControllerBase { [AllowAnonymous] [HttpPost("login")] public IActionResult Login(string username, string password) { // 假设这里是验证用户名和密码的逻辑 // 如果验证通过,创建一个JWT token并返回给客户端 var token = GenerateToken(username); return Ok(new { token }); } [Authorize] [HttpGet("protected")] public IActionResult Protected() { // 受保护的路由,只有经过认证的用户才能访问 return Ok("You have accessed the protected route."); } private string GenerateToken(string username) { var claims = new[] { new Claim(ClaimTypes.Name, username), // 可以添加其他自定义的claims }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key")); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: "your_issuer", audience: "your_audience", claims: claims, expires: DateTime.Now.AddMinutes(30), // token过期时间 signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(token); } } ``` 以上示例代码演示了如何使用.NET 6 Web APIJWT进行授权鉴权。请注意替换示例中的"your_issuer"、"your_audience"和"your_secret_key"为适合你的实际情况的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值