首页 > 其他分享 >JWT认证和授权

JWT认证和授权

时间:2024-02-22 22:55:24浏览次数:20  
标签:JWTTokenOptions JWT 认证 new 授权 tokenOptions 鉴权

1.JWT的组成部分
A.头部(Header):它包含了token的类型,即JWT,以及用于生成签名的算法信息,例如HMAC SHA256或RSA。在JWT中,头部通常是一个JSON 对象,例如 { "alg": "HS256", "typ": "JWT" }。
B.载荷(Payload):这部分包含了声明(Claim),也就是一些关于实体的陈述,如主题、发行者、过期时间等。这些声明可以包括标准的和自定义的字段,例如 { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 },其中 sub 表示主题,name 是名称,iat 代表令牌颁发时间。
C.签名(Signature):它是用于保证消息完整性和真实性的部分。签名是对头部和载荷使用密钥进行加密的结果。例如,若使用 HMACSHA256 算法,那么签名将是对前两部分 Base64Url 编码后的字符串与密钥进行 HMACSHA256 运算后得到的结果。

2.jwt鉴权授权流程
第一步:鉴权服务器,用户提供账户信息,服务器通过该信息进行验证该身份是否合法,确认合法会返回一个tooken信息,以便后续授权操作
第二步:授权服务器,鉴权通过后用户像系统发送一个资源请求,根据用户的身份和权限信息判断该用户是否有权访问该资源

3.开发步骤
A.appsetting.cs中配置如下:JWTTokenOptions

B.添加jwt工具类如下:
获取配置信息+生成tooken需要引入如下:

tooken获取类如下:

点击查看代码
public class CustomJWTService : ICustomJWTService
    {
        private readonly JWTTokenOptions _JWTTokenOptions;
        /// <summary>
        ///  
        /// </summary>
        /// <param name="jwtTokenOptions"></param>
        public CustomJWTService(IOptionsMonitor<JWTTokenOptions> jwtTokenOptions)
        {
            _JWTTokenOptions = jwtTokenOptions.CurrentValue;
        }
        /// <summary>
        /// 获取token
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public string GetToken(UserRes user)
        {
            #region 有效载荷:尽量避免敏感信息,可以添加需要的信息
            var claims = new[]
            {
                new Claim("Id",user.Id.ToString()),
                new Claim("NickName",user.NickName),
                new Claim("UserName",user.UserName),
            };

            //需要加密:需要加密key:
            //Nuget引入:Microsoft.IdentityModel.Tokens
            SymmetricSecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_JWTTokenOptions.SecurityKey));
            //秘钥通过加密算法生成凭证
            SigningCredentials creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            //Nuget引入:System.IdentityModel.Tokens.Jwt
            JwtSecurityToken token = new JwtSecurityToken(
             issuer: _JWTTokenOptions.Issuer,
             audience: _JWTTokenOptions.Audience,
             claims: claims,
             expires: DateTime.Now.AddMinutes(10),//10分钟有效期
             signingCredentials: creds);

            string returnToken = new JwtSecurityTokenHandler().WriteToken(token);
            return returnToken;
            #endregion
        }
    }
C.startup.cs中添加鉴权注册
点击查看代码
//第一步,注册JWT
            builder.Services.Configure<JWTTokenOptions>(builder.Configuration.GetSection("JWTTokenOptions"));
            #region JWT校验
            //第二步,增加鉴权逻辑
            JWTTokenOptions tokenOptions = new JWTTokenOptions();
            builder.Configuration.Bind("JWTTokenOptions", tokenOptions);
            builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)//Scheme
             .AddJwtBearer(options =>  //这里是配置的鉴权的逻辑
             {
                 options.TokenValidationParameters = new TokenValidationParameters
                 {
                     //JWT有一些默认的属性,就是给鉴权时就可以筛选了
                     ValidateIssuer = true,//是否验证Issuer
                     ValidateAudience = true,//是否验证Audience
                     ValidateLifetime = true,//是否验证失效时间
                     ValidateIssuerSigningKey = true,//是否验证SecurityKey
                     ValidAudience = tokenOptions.Audience,//
                     ValidIssuer = tokenOptions.Issuer,//Issuer,这两项和前面签发jwt的设置一致
                     IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tokenOptions.SecurityKey))//拿到SecurityKey 
                 };
             });
            #endregion
D.鉴权授权的使用
点击查看代码
            app.UseAuthentication();//鉴权
            app.UseAuthorization();//授权
E.

标签:JWTTokenOptions,JWT,认证,new,授权,tokenOptions,鉴权
From: https://www.cnblogs.com/cmrong/p/18028384

相关文章

  • 煤安认证需要做的准备
    一、申请煤安认证的资料准备1、企业标准2、产品说明书3、受控元件明细表4、主要元器件明细表5、工艺流程图6、设计图纸(相关机械、电气、液压图纸)注:企业标准的编写格式应符合GB/T1.1-2002《标准化工作导则第1部分:标准的结构和编写规则》;GB/T1.2-2002《标准化工作导则第2......
  • SpringSecurity与JWT如何实现项目端分离认证与授权
    ✅SpringSecurity+JWT实现项目前端分离认证授权✅1.简介SpringSecurity是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,杜区资源也比Shiro丰富。一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因......
  • Oracle递归授权view底层依赖表查询权限存储过程
    createorreplaceproceduresys.grant_view_base_table_access(p_accessownerVARCHAR2,p_vownerVARCHAR2,p_vnameVARCHAR2)--RETURNnumberasv_accessownerVARCHAR2(200):=trim(upper(p_accessowner));v_ownerVARCHAR2(200):=trim(upper(p_vowner));v_nameVARCHAR......
  • c-jwt-cracker Jwt 密钥爆破工具的安装使用
    c-jwt-cracker  项目地址:https://github.com/brendan-rius/c-jwt-cracker BuildaDockerImagedockerbuild.-tjwtcrack RunonDocker  docker版使用方法dockerrun-it--rmjwtcrackeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODk......
  • ssl 认证
    http和https区别-http:超文本传输协议-https:安全的超文本传输协议-https=http+ssl/tls-防止:篡改,截取-必须有证书:才能通信使用方式importrequestsheader={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)......
  • djangorestframework-simplejwt 的使用
    djangorestframework-simplejwt使用转载于:https://www.cnblogs.com/liuqingzheng/p/179422271快速使用1.1配置#1安装pipinstalldjangorestframework-simplejwt#2路由层fromrest_framework_simplejwt.viewsimporttoken_obtain_pair,token_verify,token_refre......
  • 报废车综合管理系统 系统源码加微信820688215 获取商业授权 体验官方地址 www.lvxun.v
    报废车综合管理系统系统源码加微信820688215获取商业授权体验官方地址 www.lvxun.vip  ......
  • Java21 + SpringBoot3使用Spring Security时如何在子线程中获取到认证信息
    目录前言原因分析解决方案方案1:手动设置线程中的认证信息方案2:使用DelegatingSecurityContextRunnable创建线程方案3:修改SpringSecurity安全策略通过设置JVM参数修改安全策略通过SecurityContextHolder修改安全策略总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多......
  • 【认证】验证确认实体的身份真实性、合法性
     认证是确认某个实体(如个人、设备或数据)的身份真实性和合法性的过程。在身份验证中,个人必须提供一些证据或信息(密钥)来证明他们所声称的身份是正确的。 签名与验证是数字认证的一种常见方式。在这种情况下,使用加密算法生成一个数字签名,并将其附加到数据上。数字签名可以确保数......
  • Blazor OIDC 单点登录授权实例5 - 独立SSR App (net8 webapp ) 端授权
    目录:OpenID与OAuth2基础知识BlazorwasmGoogle登录BlazorwasmGitee码云登录BlazorOIDC单点登录授权实例1-建立和配置IDS身份验证服务BlazorOIDC单点登录授权实例2-登录信息组件wasmBlazorOIDC单点登录授权实例3-服务端管理组件BlazorOIDC单点登录授权实......