02_Web Api使用Jwt

这篇具有很好参考价值的文章主要介绍了02_Web Api使用Jwt。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JWT(JSON Web Token)是一种用于在网络应用之间传递信息的开放标准(RFC 7519)。它使用 JSON 对象在安全可靠的方式下传递信息,通常用于身份验证和信息交换。

在Web API中,JWT通常用于对用户进行身份验证和授权。当用户登录成功后,服务器会生成一个Token并返回给客户端,客户端在接下来的请求中携带该Token来进行身份验证。

使用:

安装包:JWT

1.添加一个Web Api项目

appsettings.json设置

"JWT": { 
    "SecretKey": "123456789ffffffffffffffffffffffffffffffffffff", //私钥
    "Issuer": "zhansan", //发布者
    "Audience": "lisi" //接收者
  }

 

2.添加一个控制器用于获取Token

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class TokenController : ControllerBase
    {
        public readonly IConfiguration configuration;
        public TokenController(IConfiguration configuration)
        {
            this.configuration = configuration;
        }

        [HttpGet]
        public string GetToken()
        {//HmacSha256算法
            var signingAlogorithm = SecurityAlgorithms.HmacSha256;
            //存放用户信息 
            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub,"userId"),
                new Claim(ClaimTypes.Role,"admin"),
                new Claim(ClaimTypes.Name,"ClaimTypesName"),new Claim("policy","EmployeeNumber"),
            };//取出私钥并以utf8编码字节输出
            var secretByte = Encoding.UTF8.GetBytes(configuration["JWT:SecretKey"]);
            //使用非对称算法对私钥进行加密
            var signingKey = new SymmetricSecurityKey(secretByte);
            //使用HmacSha256来验证加密后的私钥生成数字签名
            var signingCredentials = new SigningCredentials(signingKey, signingAlogorithm);
            //生成Token
            var Token = new JwtSecurityToken(
                    issuer: configuration["JWT:Issuer"],        //发布者
                    audience: configuration["JWT:Audience"],    //接收者
                    claims: claims,                             //存放的用户信息
                    notBefore: DateTime.UtcNow,                 //发布时间
                    expires: DateTime.UtcNow.AddDays(1),        //有效期设置为1天
                    signingCredentials                           //数字签名
                );
            //生成字符串token
            var _Tokenstring = new JwtSecurityTokenHandler().WriteToken(Token);

            return _Tokenstring;
        }
    }

 

3.Program.cs设置

public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.
            builder.Services.AddControllers();
            // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
            builder.Services.AddEndpointsApiExplorer();

            builder.Services.AddSwaggerGen(c =>
            {
                //版本控制
                foreach (FieldInfo field in typeof(EditionV).GetFields())
                {
                    c.SwaggerDoc(field.Name, new OpenApiInfo()
                    {
                        Title = field.Name + "版本",
                        Version = field.Name,
                        Description = $"{field.Name}版本"
                    });
                }
                //为swagger UI设置xml文档注释路径
                var file = Path.Combine(AppContext.BaseDirectory, "WebApiApp.xml");  // xml文档绝对路径
                var path = Path.Combine(AppContext.BaseDirectory, file); // xml文档绝对路径
                c.IncludeXmlComments(path, true); // true : 显示控制器层注释
                c.OrderActionsBy(o => o.RelativePath); // 对action的名称进行排序,如果有多个,就可以看见效果了。

                //注册到swagger中
                c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    Description = "Value: Bearer {token}",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    Scheme = "Bearer"
                });

                c.AddSecurityRequirement(new OpenApiSecurityRequirement()
                {{
                    new OpenApiSecurityScheme
                    {
                        Reference = new OpenApiReference
                        {
                            Type = ReferenceType.SecurityScheme,
                            Id = "Bearer"
                        }, Scheme = "oauth2", Name = "Bearer", In = ParameterLocation.Header }, new List<string>()
                    }
                });
            });
//策略授权 builder.Services.AddAuthorization(options => { options.AddPolicy("policy", policy => policy.RequireClaim("policy")); }); //身份认证--如何鉴权 builder.Services.AddAuthentication(options => { //options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { //取出私钥 var secretByte = Encoding.UTF8.GetBytes(builder.Configuration["JWT:SecretKey"]); options.TokenValidationParameters = new TokenValidationParameters() { //验证发布者 ValidateIssuer = true, ValidIssuer = builder.Configuration["JWT:Issuer"], //验证接收者 ValidateAudience = true, ValidAudience = builder.Configuration["JWT:Audience"], //ValidateIssuerSigningKey= true,//是否验证SigningKey //验证是否过期 ValidateLifetime = true, //验证私钥 IssuerSigningKey = new SymmetricSecurityKey(secretByte) }; }); //配置跨域服务 builder.Services.AddCors(options => { options.AddPolicy("cross", p => { p.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(c => { foreach (FieldInfo field in typeof(EditionV).GetFields()) { c.SwaggerEndpoint($"/swagger/{field.Name}/swagger.json", $"{field.Name}"); } }); } app.UseCors("cross"); //跨域 app.UseHttpsRedirection(); app.UseAuthentication(); //鉴权 app.UseAuthorization();//授权 app.MapControllers(); app.Run(); } }

 

4.swagger设置

    /// <summary>
    /// 版本
    /// </summary>
    public static class EditionV
    {
        public static string V1;
        public static string V2;
        public static string V3;
        public static string V4;
        public static string V5;
    }

添加一个WebApiApp.xml文件,属性:复制到输出目录:始终复制

项目--->属性--->文档文件勾上。

02_Web Api使用Jwt

 

5.添加一个UserInfoController.cs用于测试

    [Route("api/[controller]/[action]")]
    [ApiController]
    [ApiExplorerSettings(GroupName =nameof(EditionV.V1))]
    public class UserInfoController : ControllerBase
    {
        /// <summary>
        /// 获取用户
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet]
        [Authorize]
        public string GetUser(string id)
        {
            return $"用户id{id}---姓名:张三";
        }

        /// <summary>
        /// 获取用户名
        /// </summary>
        /// <returns></returns>
        [Authorize(Roles = "admin")]
        [HttpPost]
        public string GetUserName()
        {
            return "你好,我是李四";
        }
/// <summary> /// 获取用户颜色 /// </summary> /// <returns></returns> [Authorize(Policy = "policy")] [HttpPost] public string GetUserColour() { return "我衣服的颜色为红色"; } }

 文章来源地址https://www.toymoban.com/news/detail-849848.html

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

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

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

相关文章

  • Json Web Token(JWT)

    JSON Web Token (JWT) 是一个开放标准 ( RFC 7519 ),它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全传输信息。此信息可以验证和信任,因为它是数字签名的。JWT 可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。 1.Authorization(授权):

    2024年02月19日
    浏览(59)
  • JWT(Json Web Token)简介

    一般的Token认证流程是这样的:         1. 用户输入用户名和密码,发送给服务器。          2. 服务器验证用户名和密码,正确的话就返回一个签名过的token(token 可以认为就是个长长的字符串),浏览器客户端拿到这个token。          3. 后续每次请求中,浏览器

    2023年04月08日
    浏览(39)
  • 什么是JWT(JSON Web Token)?

    JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间传递信息的安全传输方式。它通过数字签名来验证信息的合法性,并且具有自包含性,即它包含了足够的信息以供验证和识别。 JWT通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。 1. 头部(

    2024年02月12日
    浏览(48)
  • JWT(JSON Web Token )详解及实例

    目录 一、什么是 JWT ? 二、什么时候使用 JWT ? 三、JWT 格式 1、Header 2、Payload 3、Signature 4、 JWT实现: 官网 JSON Web Tokens - jwt.io RFC 7519文档 RFC 7519: JSON Web Token (JWT) JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全

    2024年02月06日
    浏览(47)
  • JWT(Json Web Token)的原理、渗透与防御

    (关于JWT kid安全部分后期整理完毕再进行更新~2023.05.16) JWT全称为Json web token,是为了在网络应用环境间传递声明而执行的一中基于JSON的开放标准。常用于分布式站点的单点登录。 JWT的声明一般被用在客户端与服务端之间传递身份认证信息,便于向服务端请求资源。 (我理

    2024年02月05日
    浏览(39)
  • 分布式环境集成JWT(Java Web Token)

    Token的引入:客户端向服务端请求数据时一般都会加入验证信息,比如客户端在请求的信息中携带用户名、密码,服务端会校验用户名和密码是否正确,校验通过响应该客户端请求。但是每次都携带用户名和密码无疑有些繁琐,而且也不安全,在这种背景下,Token便应运而生。

    2024年02月11日
    浏览(48)
  • 【WEB3】如何使用Web3J库开发应用连接到以太坊区块链网络

    ​ Web3j 是一个与以太坊智能合约交互并与以太坊节点集成的 Java 库。它是高度模块化、类型安全和反应式的,专为以太坊上的 Java 和 Android 开发而构建。Web3j 消除了编写自定义集成代码以连接到以太坊区块链网络的开销。 通过 HTTP 和 IPC 实现完整的 Ethereum JSON-RPC客户端 API,

    2024年02月02日
    浏览(59)
  • Java实现JSON Web Token(JWT)的生成、解码和验证

    JSON Web Token(JWT)是一种用于安全传输信息的开放标准。它可以用于认证和授权用户,以及在不同系统之间传输数据。在本文中,我们将介绍如何在 Java 中使用 jjwt 库来生成、解码和验证 JWT 引入 jjwt 库 首先,你需要在你的项目中引入 jjwt 库。如果你使用 Maven,可以在 pom.xm

    2024年02月10日
    浏览(64)
  • 解锁互联网安全的新钥匙:JWT(JSON Web Token)

    目录 前言 一、JWT简介 1. 什么是JWT? ​编辑 2. JWT的工作原理 3.JWT如何工作的 4. JWT的优势 5. 在实际应用中使用JWT 6.传统Session和JWT认证的区别 6.1.session认证方式 6.2.JWT认证方式 7.基于Token的身份认证 与 基于服务器的身份认证  二、JWT的结构 (1) Header (2) Payload (3) Signature  三、

    2024年02月08日
    浏览(45)
  • 文献速递:生成对抗网络医学影像中的应用——3DGAUnet:一种带有基于3D U-Net的生成器的3D生成对抗网络

    给大家分享文献的主题是生成对抗网络(Generative adversarial networks, GANs)在医学影像中的应用。文献的研究内容包括同模态影像生成、跨模态影像生成、GAN在分类和分割方面的应用等。生成对抗网络与其他方法相比展示出了优越的数据生成能力,使它们在医学图像应用中广受欢

    2024年02月02日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包