webapi JWT 认证

第一步 使用ng安装JWT组件

第二步 编写登录和生成token代码

            byte[] key = Encoding.UTF8.GetBytes("123456789aaaaaaa");
            IJwtAlgorithm algorithm = new HMACSHA256Algorithm();//加密方式
            IJsonSerializer serializer = new JsonNetSerializer();//序列化Json
            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();//base64加解密

            IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);//JWT编码    

            var payload = new Dictionary<string, object>() {
                { "sub","121212"},
                { "name","胜多负少多送点"},
                { "uid","587345"},
                { "exp",DateTime.Now.AddDays(1)},
            };

            var token = encoder.Encode(payload, key);//生成令牌
            return token;

第三部编写  基于 AuthorizeAttribute 的请求筛选

  public class ApiAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool IsAuthorized(HttpActionContext actionContext)
        {

            var authHeader = from h in actionContext.Request.Headers where h.Key == "token" select h.Value.FirstOrDefault();
            byte[] key = Encoding.UTF8.GetBytes("123456789aaaaaaa");
            IJwtAlgorithm algorithm = new HMACSHA256Algorithm();//加密方式
            IJsonSerializer serializer = new JsonNetSerializer();//序列化Json
            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();//base64加解密
            IDateTimeProvider provider1 = new UtcDateTimeProvider();
            IJwtValidator validator1 = new JwtValidator(serializer, provider1);
            JwtDecoder jwtDecoder = new JwtDecoder(serializer, validator1, urlEncoder);
            //解密,在这里可以做互斥登录、或者做token 有效性验证
            var jwt = jwtDecoder.Decode(authHeader.Single());
            return false;
            //  return base.IsAuthorized(actionContext);
        }

        protected override void HandleUnauthorizedRequest(HttpActionContext filterContext)
        {
            base.HandleUnauthorizedRequest(filterContext);

            var response = filterContext.Response = filterContext.Response ?? new HttpResponseMessage();
            response.StatusCode = HttpStatusCode.Forbidden;
            var content = new
            {
                success = false,
                errs = new[] { "您暂无权限" }
            };
            response.Content = new StringContent(Json.Encode(content), Encoding.UTF8, "application/json");
        }
    }

使用的时候只需要在  Controller 或者 action 上加上特性 [ApiAuthorize] 不需要验证的增加特性 [AllowAnonymous]

原文地址:https://www.cnblogs.com/sxmny/p/10757337.html

时间: 2024-11-06 15:26:49

webapi JWT 认证的相关文章

C#进阶系列——WebApi 身份认证解决方案:Basic基础认证

前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想想都恐怖.经过一番折腾,总算是加上了接口的身份认证,在此记录下,也给需要做身份认证的园友们提供参考. WebApi系列文章 C#进阶系列--WebApi接口测试工具:WebApiTestClient C#进阶系列--WebApi 跨域问题解决方案:CORS C#进阶系列--WebApi身份认证解决方

python实现后台系统的JWT认证

介绍一种适用于restful+json的API认证方法,这个方法是基于jwt,并且加入了一些从oauth2.0借鉴的改良. 1. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的.认证是判定用户的合法性,鉴权是判定用户的权限级别是否可执行后续操作.这里所讲的仅含认证.认证有几种方法: 1.1 basic auth 这是http协议中所带带基本认证,是一种简单为上的认证方式.原理是在每个请求的header中添加用户名和密码的字符串(格式为“username:password”,用base6

sau交流学习社区--songEagle开发系列:Vue.js + Koa.js项目中使用JWT认证

一.前言 JWT(JSON Web Token),是为了在网络环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519). JWT不是一个新鲜的东西,网上相关的介绍已经非常多了.不是很了解的可以在网上搜索一下相关信息. 同步sau交流学习社区:https://www.mwcxs.top/page/454.html 二.源码 Talk is cheap. Show me the code. 三.工作流程 JWT本质来说是一个token.在前后端进行HTTP连接时来进行相应的验证. 1. 

Django REST framework 之JWT认证

Json Web Token 1.JWT简介 JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法.JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名.它具备两个特点: 简洁(Compact) 可以通过URL, POST 参数或者在 HTTP header 发送,因为数据量小,传输速度快 自包含(Self-contained) 负载中包含了所有用户所需要的信息,避免了多次查询数据库 2.JWT 组成

drf框架中jwt认证,以及自定义jwt认证

0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pip install djangorestframework-jwt 使用自带设定好的jwt from django.urls import path from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [ path(

频率类组件-认证规图分析-JWT认证-drf-jwt插件

频率类源码 # 1)APIView的dispath方法中的 self.initial(request, *args, **kwargs) 点进去 # 2)self.check_throttles(request) 进行频率认证 频率组件原理分析 频率组件的核心源码分析 def check_throttles(self, request): throttle_durations = [] # 1)遍历配置的频率认证类,初始化得到一个个频率认证类对象(会调用频率认证类的 __init__() 方法)

JWT 认证 签发与校验token 多方式登陆 自定义认证规则反爬 admin密文显示

一 .认证方法比较 1.认证规则图 django 前后端不分离 csrf认证 drf 前后端分离 禁用csrf 2. 认证规则演变图 数据库session认证:低效 缓存认证:高效 jwt认证:高效 3. 认证比较 """ 1)session存储token,需要数据库参与,耗服务器资源.低效 2)缓存存token,需要缓存参与,高效,不易集群 3)客户端存token,服务器存签发与交易token的算法,高效,易集群 """ 缓存认证: 不易并发

自定义路由组件,Django的admin后台管理,DRF的三大认证,jwt认证

目录 一.自定义路由组件 1. 为什么要自定义路由组件 2. 自定义路由组件实例 二.Django的admin后台管理 三.DRF的三大认证组件概括 1. 认证组件 2. 权限组件 3. 频率组件 四.Django中的用户权限管理 五.jwt认证 1. jwt认证和普通session认证的区别 2. jwt认证介绍 (1)jwt的原理 (2)jwt三部分的内容 3. jwt的签发算法 (1)第一步:头部算法 (2)第二步:载荷部分的算法 (3)第三步:签名部分的算法 (4)第四步:连接生成tok

Django rest-framework的jwt认证

目录 jwt认证 jwt认证和普通session认证的区别 jwt认证组成 jwt的签发算法 头部算法 载荷部分的算法 签名部分的算法 连接生成token jwt的校验算法 切分 解密头部 解密载荷 碰撞校验签名 校验用户对象 jwt的刷新算法 jwt认证的优点 DRF中的jwt认证 工作原理 jwt认证 jwt 是json web token的缩写,是一种登录认证的认证方式 jwt认证和普通session认证的区别 session需要保存至服务端数据库中,而jwt服务器不需要存储token,服