首页 > 其他分享 >net core-jwt

net core-jwt

时间:2023-06-02 17:12:13浏览次数:32  
标签:core JWT jwt Microsoft options using new net public

namespace JWTWebApi.JWT;

public class JwtOptions
{
        /// <summary>
        /// 签发者
        /// </summary>
        public string Issuer { get; set; }

        /// <summary>
        /// 接收者
        /// </summary>
        public string Audience { get; set; }

        /// <summary>
        /// 密钥
        /// </summary>
        public string Key { get; set; }

        /// <summary>
        /// 过期时间
        /// </summary>
        public int ExpireSeconds { get; set; }
}
 "JWT": {
    "Issuer": "签发方",
    "Audience": "接受方",
    "Key": "A86DA130-1B95-4748-B3B2-1B6AA9F2F743",//加密密钥
    "ExpireSeconds": 6004 //密钥过期时间
  }
using System.Text;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using Microsoft.Extensions.Options;

namespace JWTWebApi.JWT;

public static class JWTExtensions
    {
        public static AuthenticationBuilder AddJWTAuthentication(this IServiceCollection services, IConfiguration configurationManager)
        {
            JwtOptions jwtOptions = configurationManager.GetSection("JWT").Get<JwtOptions>();
            return services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(x =>
                {
                    x.TokenValidationParameters = new()
                    {

                        ValidateIssuer = true,//是否验证发行商
                        ValidateAudience = true,//是否验证受众者
                        ValidateLifetime = true,//是否验证失效时间
                        ValidateIssuerSigningKey = true,//是否验证签名键
                        ValidIssuer = jwtOptions.Issuer,
                        ValidAudience = jwtOptions.Audience,
                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.Key))
                    };
                });
        }
    }
using System.Security.Claims;

namespace JWTWebApi.JWT;

public interface IJwtService
{
    string BuildToken(IEnumerable<Claim> claims, JwtOptions options);
}
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;

namespace JWTWebApi.JWT;

public class JwtService : IJwtService
    {
        public string BuildToken(IEnumerable<Claim> claims, JwtOptions options)
        {
            //过期时间
            TimeSpan timeSpan = TimeSpan.FromSeconds(options.ExpireSeconds);//token过期时间
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.Key));//加密的token密钥
            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);//签名证书,其值为securityKey和HmacSha256Signature算法
            var tokenDescriptor = new JwtSecurityToken(options.Issuer, options.Audience, claims, expires: DateTime.Now.Add(timeSpan), signingCredentials: credentials);//表示jwt token的描述信息,其值包括Issuer签发方,Audience接收方,Claims载荷,过期时间和签名证书
            return new JwtSecurityTokenHandler().WriteToken(tokenDescriptor);//使用该方法转换为字符串形式的jwt token返回
        }
    }
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;

namespace JWTWebApi.JWT;

public static class SwaggerGenOptionsExtensions
    {
        /// <summary>
        /// 为swagger增加Authentication报文头
        /// </summary>
        /// <param name="option"></param>
        public static void AddAuthenticationHeader(this SwaggerGenOptions option)
        {
            option.AddSecurityDefinition("Authorization",
                new OpenApiSecurityScheme
                {
                    Description = "Authorization header. \r\nExample:Bearer 12345ABCDE",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    Scheme = "Authorization"
                }
                ); ;

            option.AddSecurityRequirement(new OpenApiSecurityRequirement()
            {
                {
                    new OpenApiSecurityScheme
                    {
                        Reference=new OpenApiReference
                        {
                            Type=ReferenceType.SecurityScheme,
                            Id="Authorization"
                        },
                        Scheme="oauth2",
                        Name="Authorization",
                        In=ParameterLocation.Header,
                    },
                    new List<string>()
                }
            });
        }
    }
#region  JWT
builder.Services.AddScoped<IJwtService, JwtService>();
builder.Services.AddJWTAuthentication(builder.Configuration);
builder.Services.Configure<SwaggerGenOptions>(c =>
{
    c.AddAuthenticationHeader();
});
#endregion

 

标签:core,JWT,jwt,Microsoft,options,using,new,net,public
From: https://www.cnblogs.com/Insist-Y/p/17452372.html

相关文章

  • Kubernetes(k8s)定时任务:CronJob
    目录一.系统环境二.前言三.KubernetesCronJob简介四.kubernetesCronJob和Linuxcrontab对比五.CronJob表达式语法六.创建CronJob定时任务七.创建具有超时时间的CronJob定时任务八.总结一.系统环境本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。服务器版本docke......
  • [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
    本文引用:https://www.cnblogs.com/willick/p/3223042.html为什么需要依赖注入在[ASP.NETMVC小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离(separationofconcerns)。我们希望应用程序的各部分组件尽可能多的相互独立、尽可能少的相互依赖。我们的......
  • .NET大文件分片上传/多线程上传
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • ASP.NET MVC 小牛之路]02 - C#知识点提要
    本文引用:https://www.cnblogs.com/willick/p/3208427.html本篇博文主要对asp.netmvc开发需要撑握的C#语言知识点进行简单回顾,尤其是C#3.0才有的一些C#语言特性。对于正在学asp.netmvc的童鞋,不防花个几分钟浏览一下。本文要回顾的C#知识点有:特性、自动属性、对象集合初始化器、......
  • [ASP.NET MVC 小牛之路]03 - Razor语法
    本文引用:https://www.cnblogs.com/willick/p/3224144.htmlRazor是MVC3中才有的新的视图引擎。我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令。而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活更简洁。下面通过一些简单示例让大家快速撑握Razor语法的使用......
  • [ASP.NET MVC 小牛之路]01 - 理解MVC模式
    文章出处: https://www.cnblogs.com/willick/p/3195560.html理解一般意义上的MVC模式MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为以下三个基本部分:模型(Model):模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有......
  • Netty实战(十)
    (编解码器框架)一、什么是编解码器框架网络只将数据看作是原始的字节序列。但我们的应用程序则会把这些字节组织成有意义的信息。在数据和网络字节流之间做相互转换是最常见的编程任务之一。例如,我们可能需要处理标准的格式或者协议(如FTP或Telnet)、实现一种由第三方定义的专......
  • 基于shiro+jwt的真正rest url权限管理,前后端分离
    bootshiro&usthebootshiro是基于springboot+shiro+jwt的真正restfulURL资源无状态认证权限管理系统的后端usthe是restfulURL资源无状态认证权限管理系统的前端,基于angular+typeScript+adminLte区别于一般,提供页面可配置式的,动态的restfulapi安全管理支持数据传输动态......
  • Self-Supervised Hypergraph Convolutional Networks for Session-based Recommendati
    目录概符号说明HypergraphLinegraphDHCNHypergraphChannelLineGraphChannelContrastiveLearning优化代码XiaX.,YinH.,YuJ.,WangQ.,CuiLandZhangX.Self-supervisedhypergraphconvolutionalnetworksforsession-basedrecommendation.AAAI,2021.概自监......
  • kubernetes 组件介绍及搭建
    准备主机昵称IP安装服务master192.168.100.10docker、kubelet-1.23.0kubeadm-1.23.0kubectl-1.23.0node192.168.100.20docker、kubelet-1.23.0kubeadm-1.23.0kubectl-1.23.0博客推荐:(11条消息)k8s搭建部署(超详细)_Anime777的博客-CSDN博客博客有一个网页管......