C# JWT权限验证的实现

目录
  • 什么是JWT,它是一种对API的保护方案,为什么要进行保护呢
  • 设计原则
  • 第一步:创建token
  • 第二步:解析token

什么是JWT,它是一种对API的保护方案,为什么要进行保护呢

  • 防泄漏:你肯定不希望你的数据能被别人随意调用,比如公司的机密信息,不可能每个人都可以访问到
  • 防攻击:防止被人伪装恶意调用接口,利用网关就把请求拦截在外面,防止对服务器造成资源压力
  • 防止被人篡改,导致请求不到信息,防重放攻击(案例:在公共网络环境中,请求被截获,稍后被重放或多次重放)

设计原则

  • 轻量级
  • 易于开发、测试和部署
  • 适合于异构系统(跨操作系统、多语言简易实现)
  • 所有写操作接口(增、删、改 操作)
  • 非公开的读接口(如:涉密/敏感/隐私 等)

第一步:创建token

/// <summary>
        /// 创建token
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult CreateJWT1()
        {
            //创建声明Token数组
            var claim = new Claim[]
                {
                new Claim("userid","123"),
                new Claim("userCode","kevinMa"),
                new Claim("projectID","62"),
                new Claim("isValid","1"),
                new Claim("userName","马鹏"),
                new Claim("address","深圳"),
                new Claim("datetime",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")),
                new Claim("expires",DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss")),
                };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yanglingcong@qq.com"));//密钥大小要超过128bt,最少要16位

            //实例化一个token对象
            //第一种方式
            //var token = new JwtSecurityToken(claims: claim);

            //第二种方式
            var token = new JwtSecurityToken(
                issuer: "kevin",//发起人:当前项目
                audience: "kevin project",//订阅:我们需要谁去使用这个Token
                claims: claim,//声明的数组
                expires: DateTime.Now.AddHours(1),//当前时间加一小时,一小时后过期
                signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)//数字签名 第一部分是密钥,第二部分是加密方式
                );

            //生成token
            var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
            return ToSuccessJson(new { token = jwtToken });
        }

第二步:解析token

/// <summary>
        /// 解析token
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult JXToken(string token)
        {
            
            //第一种直接用JwtSecurityTokenHandler提供的read方法
            var jwtHander = new JwtSecurityTokenHandler();
            JwtSecurityToken jwtSecurityToken = jwtHander.ReadJwtToken(token);
            
            GetTokenModel tokenModel = new GetTokenModel();
            var currentInfo = jwtSecurityToken.Claims;
            if (currentInfo.Count() > 0)
            {
                tokenModel.userid = currentInfo.FirstOrDefault(f => f.Type == "userid").Value;
                tokenModel.userCode = currentInfo.FirstOrDefault(f => f.Type == "userCode").Value;
                tokenModel.projectID = currentInfo.FirstOrDefault(f => f.Type == "projectID").Value;
                tokenModel.userName = currentInfo.FirstOrDefault(f => f.Type == "userName").Value;
                tokenModel.address = currentInfo.FirstOrDefault(f => f.Type == "address").Value;
                tokenModel.datetime = currentInfo.FirstOrDefault(f => f.Type == "datetime").Value;
                tokenModel.expires = currentInfo.FirstOrDefault(f => f.Type == "expires").Value;
            }
            return ToSuccessJson(new { tokenModel });
        }

到此这篇关于C# JWT权限验证的实现的文章就介绍到这了,更多相关C# JWT权限验证内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • c#关于JWT跨域身份验证的实现代码

    JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案.为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519), 该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景.JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息, 以便于从资源服务器获取资源,该token也可直接被用于认证,也可被加密. 一.JWT的组成 下面是JWT的一段示例,分为三个部分,分别是头部(header),载荷(payload)}和签

  • C#实现JWT无状态验证的实战应用解析

    前言 本文主要介绍JWT的实战运用. 准备工作 首先我们创建一个Asp.Net的,包含MVC和WebApi的Web项目. 然后使用Nuget搜索JWT,安装JWT类库,如下图. 设计思路 这里我们简单的做了一个token验证的设计,设计思路如下图所示: 代码实现 缓存 首先,我们先开发工具类,根据设计思路图可得知,我们需要一个缓存类,用于在服务器端存储token. 编写缓存相关类代码如下: public class CacheHelper { public static object GetCa

  • C#基于jwt实现分布式登录

    一.传统的session登录 在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证. 在asp.net core中可以简单实现: // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void

  • C# JWT权限验证的实现

    目录 什么是JWT,它是一种对API的保护方案,为什么要进行保护呢 设计原则 第一步:创建token 第二步:解析token 什么是JWT,它是一种对API的保护方案,为什么要进行保护呢 防泄漏:你肯定不希望你的数据能被别人随意调用,比如公司的机密信息,不可能每个人都可以访问到 防攻击:防止被人伪装恶意调用接口,利用网关就把请求拦截在外面,防止对服务器造成资源压力 防止被人篡改,导致请求不到信息,防重放攻击(案例:在公共网络环境中,请求被截获,稍后被重放或多次重放) 设计原则 轻量级 易于开发.

  • 详解基于JWT的springboot权限验证技术实现

    JWT简介 Json Web Token(JWT):JSON网络令牌,是为了在网络应用环境间传递声明而制定的一种基于JSON的开放标准((RFC 7519).JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式用于通信双方之间以 JSON 对象行使安全的传递信息.因为数字签名的存在,这些信息是可信的. 实现步骤: 环境spring boot 1.添加jwt依赖 <dependency> <groupId>com.auth0</groupId> <ar

  • 基于JWT的spring boot权限验证技术实现教程

    JWT简介 Json Web Token(JWT):JSON网络令牌,是为了在网络应用环境间传递声明而制定的一种基于JSON的开放标准((RFC 7519).JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式用于通信双方之间以 JSON 对象行使安全的传递信息.因为数字签名的存在,这些信息是可信的. 实现步骤: 环境spring boot 1.添加jwt依赖 <dependency> <groupId>com.auth0</groupId> <ar

  • vue登录以及权限验证相关的实现

    关键词:前后端分离.jwt.登录.权限验证 最近在做一个小应用,需要用到vue实现登录,以及给不同路由设置权限.在网上看了很多文章,讲的是乱七八糟.感叹国内技术类文章实在是差劲,抄来抄去.这篇文章就说说我最后是如何实现的. 前后端分离项目中,后端提供api接口给前端,使用jwt发放权限. 首先前端提供用户名和密码请求登录接口,后端验证之后返回给前端一个token,之后前端在请求需要权限的接口时携带这个token就可以了. 两个问题 现在面临两个问题, 首先vue中不同的路由有不同的权限,比如我要

  • Django REST framwork的权限验证实例

    在这里插入代码片# Django REST framwork的权限验证 一.用户是否登录 (1)判断用户是否登录: permission_classes = (IsAuthenticated, ) 注意:permission_classes设置的是:验证的是用户是否登录.用户是否可以操作该数据等的权限: 权限组合方式,目前支持:与&(and) 或|(or) 非~(not) 例如:permission_classes = (SecAdminPermission | AudAdminPermissi

  • Node登录权限验证token验证实现的方法示例

    1. token的使用场景 无状态请求 保持用户的登录状态 第三方登录(token+auth2.0) 2. 基于token的验证原理 后端不再存储认证信息,而是在用户登录的时候生成一个token,然后返回给前端,前端进行存储,在需要进行验证的时候将token一并发送到后端,后端进行验证 加密的方式:对称加密和非对称加密,对称加密指的是加密解密使用同一个密钥,非对称加密使用公钥和私钥,加密用私钥加密,解密用公钥解密 3. 基于Token的身份验证的过程如下: 客户端:用户名和密码请求登录 服务器:

  • .Net Core官方JWT授权验证的全过程

    什么是JWT? JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为JSON对象.由于此信息是经过数字签名的,因此可以被验证和信任.可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名. 尽管可以对JWT进行加密以提供双方之间的保密性,但我们将重点关注已签名的令牌.签名的令牌可以验证其中包含的声明的完整性,而加密的令牌则将这些声明隐藏在其他方的面前.当使用公钥/私钥对对令牌进行签名时,

  • Java的接口调用时的权限验证功能的实现

    提示:这里可以添加本文要记录的大概内容: 例如:一般系统前端调用后台相关功能接口时,需要验证此时用户的权限是否满足调用该接口的条件,因此我们需要配置相应的验证权限的功能. 提示:以下是本篇文章正文内容,下面案例可供参考 一.编写的环境 工具:IDEA 框架:GUNS框架(自带后台权限验证配置,我们这里需要编写前端权限验证配置) 二.使用步骤 1.配置前端调用的接口 代码如下(示例): 在WebSecurityConfig中: // 登录接口放开过滤 .antMatchers("/login&qu

  • Django中的JWT身份验证的实现

    1.认证与授权 1.验证:身份验证是验证个人或设备标识的过程.身份验证过程之一是登录过程.注册网站后,您的信息(ID,密码,名称,电子邮件等)将存储在其数据库中.之后,您无需创建帐户即可提供信息.相反,您只需要提供用户名和密码来验证您的身份,网站就会自动知道您正在访问. 2.授权:授权是用于确定用户特权或访问级别的安全机制.在许多社区网站上,只有上传帖子和管理员的人才能删除它.当其他人尝试删除帖子时,网站应该抛出错误(但是在许多情况下,他们甚至看不到删除按钮).因此,对于每个请求,用户都需要证明

  • SpringBoot+SpringSecurity+jwt实现验证

    目录 环境 目录结构信息 记录一下使用springSecurity实现jwt的授权方法,这方法可以实现权限的基本认证.当然这个案例还有许多的问题,不过还是先记录一下.其他功能以后在补充. 建议工程创建流程 创建 JwtTokenUtils 创建 jwtAccessDeniedHandler 和 JwtAuthenticationEntryPoint 创建 UserDetailsServiceImpl 创建 JwtAuthenticationFilter 配置 Security信息 启动类的信息

随机推荐