.NET WebAPI 运用JWT鉴权授权

这篇具有很好参考价值的文章主要介绍了.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}文章来源地址https://www.toymoban.com/news/detail-622450.html

到了这里,关于.NET WebAPI 运用JWT鉴权授权的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .Net Core Jwt鉴权授权

    目录 简介 基于.Net Core 验证方式 Jwt获取Token 引入三方包 生成Token UserInfo JwtConfig WebApi测试(获取Token) Program.cs appsetting.json Controller .Net Core 验证(webApi) Progarm.cs Contorller .Net Core 授权 简介 Program.cs JwtAuthorization.cs 注意 Autofac 注册授权服务 Controller 注意 jwt触发委托 Jwt分为三段 通过远

    2024年02月13日
    浏览(34)
  • ASP.NET Core 8.0 WebApi 从零开始学习JWT登录认证

    我一起写后端Api我都是直接裸连的,但是现在为了规范一些,我还是打算上一个JWT功能 ASP.NET Web API 2系列(四):基于JWT的token身份认证方案 Jwt-dotnet github 选好了模板,就进去看看号了,42M的下载量已经很高了,一般来说,只要超过500k的下载量,基本就是一个稳定的代码仓库了

    2024年04月09日
    浏览(45)
  • AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其一)

    最近不知怎么的,自从学了WebAPI(为什么是这个,而不是MVC,还不是因为MVC的Razor语法比较难学,生态不如现有的Vue等框架,webapi很好的结合了前端生态)以后,使用别人的组件一帆风顺,但是不知其意,突然很想自己实现一个基于的JWT认证服务,来好好了解一下这个内容。 自

    2023年04月19日
    浏览(37)
  • AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其二)

    前面说了用第三方类库生成JWT的故事,给我带来了很大的方便,并且我也承诺要写一篇用常规方法生成JWT的文章( 一般都是用微软官方的类库 ),因此才有了这篇文章。 另外,在前面的文章中,我要纠正一下一些错误JWT的整个结构决定了JWT只能作为临时的授权认证解决方案,

    2023年04月26日
    浏览(32)
  • 从零到一搭建netcore6.0 webapi+swagger+jwt认证+aop日志+mysql codefirst模式

    本文介绍从零到一搭建基于netcore6.0版本的 webapi接口应用 包括swagger接口管理文档 jwt接口安全认证 aop接口调用轨迹日志 ef映射mysql 使用codefirst模式交互数据库 首先新建一个webapi应用 此次默认配置HTTPS默认是勾选的 此处没用到暂时不进行勾选 可以删除这2个默认的文件 首先我

    2024年02月04日
    浏览(52)
  • C# ASP.NET Core Web API 身份授权(JWT)验证(一)

    1.开发环境 VS2022,安装时记得勾选ASP.NET有关的都选上,建议全选,省的麻烦。          2.创建初始工程 TestApi (你自己的工程名称)。    这就创建工程成功了,按 F5 则可以进行调试了。 而在项目中,我们不仅仅会用到基础的api功能,我们一般还会用到  身份授权(J

    2024年02月02日
    浏览(61)
  • ASP.NET Core高级之认证与授权(二)--JWT认证前后端完整实现

    了解JWT身份认证的流程 了解基于JWT身份认证和Session身份认证的区别 学习如何在ASP.NET Core WebAPI项目中封装JWT认证功能 在上文ASP.NET Core高级之认证与授权(一)–JWT入门-颁发、验证令牌中演示了JWT认证的一个入门案例,本文是一个基于JWT认证的完整的前后端实现代码案例。 JWT身

    2024年02月01日
    浏览(47)
  • 图片接口JWT鉴权实现

    之前做了个返回图片链接的接口,然后没做授权,然后今天键盘到了,也是用JWT来做接口的权限控制。 然后JTW网上已经有很多文章来说怎么用了,这里就不做多的解释了,如果不懂的可以参考下列链接的 文章。 图片接口文章:还在愁个人博客没有图片放? JTW参考: 画星星

    2024年02月07日
    浏览(45)
  • Springboot实现简单JWT登录鉴权

    登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中,用户需要提供一定的身份信息(例如用户名和密码)进行登录,登录后系统会为用户生成一个身份令牌(例如 JWT Token)来标识用户的身份。 鉴权的主要目的是确保只有经过身份验证的用户才能访问系统

    2024年02月13日
    浏览(32)
  • 【Express.js】JWT基础鉴权

    Web安全是Web应用中非常重要的一环,主要由后端和服务器承担安全保障 面对请求源,后端有着各种各样的鉴权机制: session,cookie,token,jwt,OAuth,OAuth2,api-key,signature… 本节以jwt为例,演示一个极简的token鉴权 拷贝第一节HelloWorld项目 安装一种jwt依赖(本节使用jsonwebtoken) 接下来我们使

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包