webapi随机调用_BeetleX之webapi验证插件JWT集成

        对于webapi服务应用很多时候需要制订访问限制,在前面的章节也讲述了组件如何制订控制器访问控制;但到了实际应用要自己去编写还是比较麻烦。为了让访问控制更方便组件实现基于JWT的控制器访问控制组件BeetleX.FastHttpApi.Jwt;通过这个组件可以轻易地集成访问控制功能。

配置

        先需要引用BeetleX.FastHttpApi.Jwt扩展组件,然后针对HttpApiServer调用UseJWT扩展方法即可。

        static void Main(string[] args)        {            HttpApiServer server = new HttpApiServer();            server.Register(typeof(Program).Assembly);            server.Options.Port = 80;            server.Options.LogLevel = EventArgs.LogType.Info;            server.Options.LogToConsole = true;            server.Options.SSL = true;            server.Options.CertificateFile = "ssl.pfx";            server.Options.CertificatePassword = "123456";            server.UseJWT();            server.Open();            System.Threading.Thread.Sleep(-1);        }

当配置了JWT访问控制后,所有请求的api都会返回401错误

dad134eb0e41fc09ba704beee943ea26.png

使用

        组件提供了AuthMark用于标记控制器的针对JWT的验证情况,默认不标记的方法请求时都必须在Cookie:__beetlex_token或Header:Authorization中提供合法的JWT凭证信息。如果想某个方法不参与验证可以标记上[AuthMark(AuthMarkType.NoValidation)]。

[Controller]class Webapi{    [AuthMark(AuthMarkType.Admin)]    public object ListEmployee(string jwt_user, string jwt_role, IHttpContext context)    {        context.Server.Log(EventArgs.LogType.Warring, context.Session, $"{jwt_user}[{jwt_role}]");        return Northwind.Data.DataHelper.Defalut.Employees;    }    public object List(string jwt_user, string jwt_role, IHttpContext context)    {        context.Server.Log(EventArgs.LogType.Warring, context.Session, $"{jwt_user}[{jwt_role}]");        return Northwind.Data.DataHelper.Defalut.Customers;    }    [AuthMark(AuthMarkType.NoValidation)]    public string Login(string name, string pwd, IHttpContext context)    {        string result;        if (name == "admin")        {            result = context.SetAdminJwtToken(name);        }        else        {            result = context.SetJwtToken(name, "user");        }        return result;    }}

以上控制器有三个方法

  • Login

    该方法是把登陆信息写入Cookie并返回,此方法标记了 [AuthMark(AuthMarkType.Admin)],因此无须提供JWT凭证即可访问。

  • ListEmployee

    该方法需要凭证访问,并明确凭证中的角色是admin.

  • List

        该方法需要提供凭证访问

在访问的时候需可以通过访问Login来获取凭证,如果是网页请求则无须返回,SetJwtToken方法会把凭证写到Cookie中,接下来的请求会通过Cookie传递到服务处理。如果是其他途径访问,则需要把凭证设置到Header部的Authorization中;不管是那种方式提供凭证组件都能兼容处理。

        当凭证有效的情况,组件会把jwt_user和jwt_role注入到数据上下文中,这两个信息分别是JWT凭证中用户和角色;如果有需要直接在参数中定义相关变量名称即可获取。

Postman调用测试

  • 获取凭证

9dbed1bd0263971d95375de06277a4e3.png

调用方法返回了凭证信息.接下来通过该凭证再调用List方法
  • 调用List

1cc68ccd35798d774cd219746ebbb4b1.png

由于服务端输出了Cookie,Postman也记录下来,所以接下来的请求是有效通过的。但之前登陆的并不是admin用户,在这个cookie请求是无法访问ListEmployee的。

a1b8da0a0a6e0a1a976d6db81c8cb1f9.png

由于角色不是admin,因此访问ListEmployee会返回401错误。接下来使用admin用户登陆一次就可以正常访问ListEmployee方法了.

766ee48eaff7333d55c0b57a7933121d.png

95041bf80e8aa54908bab55fd92dac0c.png

修改配置        使用插件后会在程序中生成beetlex_jwtconfig.json文件
{  "Issuer": null,  "Audience": null,  "JWTKeyED": "m60IIS4+DQR8K9eh0gjrlJPFvB042RyGhtS2jOHjSzyx4T7dZVBCAm51k9+fTEC1Ux066AH198KQgZpZh4Ejmd+a7/DKDi9Dg7quwkU85jmUADnEqGM7vOl8TOO16HrtUfoABVxQ60Tt92RGRjV8VJthxYdIX/B7XjMGTsJLjpo="}
以上信息在初始化的时候随机生成,可以根据自己需求进行更改。下载示例

链接:https://pan.baidu.com/s/1ZP600HkfBc57O0gtv7npVA

提取码:3oik

【BeetleX通讯框架代码详解】

BeetleX

开源跨平台通讯框架(支持TLS)
轻松实现高性能:tcp、http、websocket、redis、rpc和网关等服务应用

https://beetlex.io

56ce1e8d2228b8c36531cca1487e7fc3.png

如果你想了解某方面的知识或文章可以把想法发送到

henryfan@msn.com|admin@beetlex.io

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《驯狮记——Mac OS X 10.8 Mountain Lion使用手册》——2.3 Dock

本节书摘来自异步社区《驯狮记——Mac OS X 10.8 Mountain Lion使用手册》一书中的第2章,第2.3节,作者:陈明 , 张铮 , 马玉龙著,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.3 Dock 驯狮记——Mac OS X 10.8 Mountain…

mysql 嵌套if标签_对比Excel、MySQL、Python,分别讲述 “if函数” 的使用原理!

作者:黄伟呢本文转自:数据分析与统计学之美其实,不管是Excel、MySQL,还是Python,“if”条件判断都起着很重要的作用。今天这篇文章,就带着大家盘点一下,这三种语言如何分别使用 “if函数” 。if…

R语言数据挖掘

数据分析与决策技术丛书 R语言数据挖掘 Learning Data Mining with R [哈萨克斯坦]贝特麦克哈贝尔(Bater Makhabel) 著 李洪成 许金炜 段力辉 译 图书在版编目(CIP)数据 R语言数据挖掘 / (哈…

vue2.0的学习

vue-router 除了使用 <router-link> 创建 a 标签来定义导航链接&#xff0c;我们还可以借助 router 的实例方法&#xff0c;通过编写代码来实现。 1&#xff09;router.push(location) 这个方法会向 history 栈添加一个新的记录&#xff0c;所以&#xff0c;当用户点击浏…

《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets

本节书摘来异步社区《Java EE 7精粹》一书中的第2章&#xff0c;第2.1节&#xff0c;作者&#xff1a;【美】Arun Gupta&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 第3章 JSF JSF是基于Java的Web应用程序开发的服务器端用户界面&#xff08;UI&#xf…

mysql5批处理_转关于mysql5.5 的批处理讨论(转载)

MySql的JDBC驱动不支持批量操作(已结)MySql连接的url中要加rewriteBatchedStatements参数&#xff0c;例如String connectionUrl"jdbc:mysql://192.168.1.100:3306/test?rewriteBatchedStatementstrue";还要保证mysql JDBC驱的版本。MySql的JDBC驱动的批量插入操作性…

《C#多线程编程实战(原书第2版)》——3.2 在线程池中调用委托

本节书摘来自华章出版社《C#多线程编程实战&#xff08;原书第2版&#xff09;》一书中的第3章&#xff0c;第3.2节&#xff0c;作者&#xff08;美&#xff09;易格恩阿格佛温&#xff08;Eugene Agafonov&#xff09;&#xff0c;黄博文 黄辉兰 译&#xff0c;更多章节内容可…

《Android 应用测试指南》——第2章,第2.4节包浏览器

本节书摘来自异步社区《Android 应用测试指南》一书中的第2章&#xff0c;第2.4节包浏览器&#xff0c;作者 【阿根廷】Diego Torres Milano&#xff08;迭戈 D.&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.4 包浏览器创建完前面提到的两个…

《OpenStack云计算实战手册(第2版)》——1.7 添加用户

本节书摘来自异步社区《OpenStack云计算实战手册&#xff08;第2版&#xff09;》一书中的第1章&#xff0c;第1.7节,作者&#xff1a; 【英】Kevin Jackson , 【美】Cody Bunch 更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.7 添加用户 在OpenStack身份认证服务中…

java外部类_Java里什么叫内部类什么叫外部类

展开全部对普通类(没有内部类的类)来说&#xff0c;62616964757a686964616fe78988e69d8331333337396234内部类和外部类都与他无关&#xff1b;对有内部类的类来说&#xff0c;它们就是其内部类的外部类&#xff0c;外部类是个相对的说法&#xff0c;其实就是有内部类的类。所以…

《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识

本节书摘来自异步社区《精通Matlab数字图像处理与识别》一书中的第6章&#xff0c;第6.2节&#xff0c;作者 张铮 , 倪红霞 , 苑春苗 , 杨立红&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 6.2 傅立叶变换基础知识 精通Matlab数字图像处理与识别要理解傅立…

《iOS 6核心开发手册(第4版)》——2.11节秘诀:构建星星滑块

本节书摘来自异步社区《iOS 6核心开发手册&#xff08;第4版&#xff09;》一书中的第2章&#xff0c;第2.11节秘诀&#xff1a;构建星星滑块&#xff0c;作者 【美】Erica Sadun&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.11 秘诀&#xff1a;构建星星…

软考下午题具体解释---数据流图设计

在历年的软考下午题其中&#xff0c;有五道大题。各自是数据流图的设计&#xff0c;数据库设计&#xff0c;uml图&#xff0c;算法和设计模式&#xff0c;从今天这篇博文開始&#xff0c;小编就跟大家来一起学习软考下午题的相关内容。包含理论上的知识以及典型例题的解说&…

mysql属于数据库三级模式_数据库系统的三级模式指的是什么

数据库系统的三级模式指的是什么发布时间&#xff1a;2020-10-26 10:11:21来源&#xff1a;亿速云阅读&#xff1a;52作者&#xff1a;小新小编给大家分享一下数据库系统的三级模式指的是什么&#xff0c;希望大家阅读完这篇文章后大所收获&#xff0c;下面让我们一起去探讨吧&…

《自顶向下网络设计(第3版)》——导读

目录 第1部分 辨明客户的需求和目标 第1章 分析商业目标和制约 1.1 采用自顶向下的网络设计方法 1.2 分析商业目标 1.3 分析商业制约 1.4 商业目标检查表 1.5 小结 1.6 复习题 1.7 设计环境 第2章 分析技术目标与折衷措施 2.1 可扩展性 2.2 可用性 2.3 网络性能 2.4 安全性 2…

最小硬币问题_进行更改的最小硬币数量

最小硬币问题Description: 描述&#xff1a; This is classic dynamic programming problem to find minimum number of coins to make a change. This problem has been featured in interview rounds of Amazon, Morgan Stanley, Paytm, Samsung etc. 这是经典的动态编程问题…

补丁(patch)的制作与应用

为什么80%的码农都做不了架构师&#xff1f;>>> 转自http://linux-wiki.cn/wiki/zh-hans/%E8%A1%A5%E4%B8%81(patch)%E7%9A%84%E5%88%B6%E4%BD%9C%E4%B8%8E%E5%BA%94%E7%94%A8 如果hack了开源代码&#xff0c;为了方便分享&#xff08;如提交Bug&#xff09;或自己…

hbase 伪分布安装 java_HBase基础和伪分布式安装配置

一、HBase(NoSQL)的数据模型1.1 表(table)&#xff0c;是存储管理数据的。1.2 行键(row key)&#xff0c;类似于MySQL中的主键&#xff0c;行键是HBase表天然自带的&#xff0c;创建表时不需要指定1.3 列族(column family)&#xff0c;列的集合。一张表中有多个行健&#xff0c…

java script创建对象_JavaScript七种非常经典的创建对象方式

JavaScript创建对象的方式有很多&#xff0c;通过Object构造函数或对象字面量的方式也可以创建单个对象&#xff0c;显然这两种方式会产生大量的重复代码&#xff0c;并不适合量产。接下来介绍七种非常经典的创建对象的方式&#xff0c;他们也各有优缺点。一、工厂模式可以无数…

axis2开发webservice之编写Axis2模块(Module)

axis2中的模块化开发。能够让开发者自由的加入自己所需的模块。提高开发效率&#xff0c;减少开发的难度。 Axis2能够通过模块&#xff08;Module&#xff09;进行扩展。Axis2模块至少须要有两个类&#xff0c;这两个类分别实现了Module和Handler接口。开发和使用一个Axis2模块…