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,一经查实,立即删除!

相关文章

java bitset_Java BitSet nextClearBit()方法与示例

java bitsetBitSet类nextClearBit()方法 (BitSet Class nextClearBit() method) nextClearBit() method is available in java.util package. nextClearBit()方法在java.util包中可用。 nextClearBit() method is used to retrieve the index of the first bit that is set to …

《驯狮记——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…

Java BigDecimal intValue()方法与示例

BigDecimal类的intValue()方法 (BigDecimal Class intValue() method) intValue() method is available in java.math package. intValue()方法在java.math包中可用。 intValue() method is used to convert a BigDecimal to an integer and when the converted BigDecimal val…

R语言数据挖掘

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

linux adduser mysql_linux_adduser

新帐号建立当不加-D参数,useradd指令使用命令列来指定新帐号的设定值and使用系统上的预设值.新使用者帐号将产生一些系统档案,使用者目录建立,拷备起始档案等,这些均可以利用命令列选项指定。此版本为RedHatLinux提供,可帮每个新加…

java iterator_Java ArrayDeque iterator()方法与示例

java iteratorArrayDeque类iterator()方法 (ArrayDeque Class iterator() method) iterator() Method is available in java.lang package. iterator()方法在java.lang包中可用。 iterator() Method is used to return an iterator over the deque elements. iterator()方法用于…

《jQuery、jQuery UI及jQuery Mobile技巧与示例》——7.4 示例:使用按钮集装饰单选框...

本节书摘来自异步社区《jQuery、jQuery UI及jQuery Mobile技巧与示例》一书中的第7章,第7.4节,作者:【荷】Adriaan de Jonge , 【美】Phil Dutson著,更多章节内容可以访问云栖社区“异步社区”公众号查看 7.4 示例:使…

mysql 模拟序列_【原创】MySQL 模拟PostgreSQL generate_series 表函数

PostgreSQL 提供了一个很强大的造数据的函数generate_series,基于Common Table Expression。MySQL 没有复杂的应用程序类型,该如何实现这样的功能呢? 我想到的三种方法如下:1. 用存储过程来做。 缺点是写好多数据库不擅长的应用逻辑。2. 我们…

Python字符串| isdigit()方法与示例

isdigit() is an in-built method in Python, which is used to check whether a string contains only digits or not. isdigit()是Python中的内置方法,用于检查字符串是否仅包含数字。 Digit value contains all decimal characters and other digits which may …

vue2.0的学习

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

mysql+url的配置参数详解_MySql链接url参数详解

mysql URL格式如下&#xff1a;jdbc:mysql://[host:port],[host:port].../[database][?参数名1][参数值1][&参数名2][参数值2]...MySQL在高版本需要指明是否进行SSL连接 在url后面加上 useSSLtrue 不然写程序会有warning常用的几个较为重要的参数&#xff1a;参数名…

Java LocalDate类| minus()方法与示例

LocalDate类isSupported()方法 (LocalDate Class isSupported() method) Syntax: 句法&#xff1a; public LocalDate minus(TemporalAmount t_amt);public LocalDate minus(long amt, TemporalUnit t_unit);isSupported() method is available in java.time package. isSuppo…

《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驱动的批量插入操作性…

Java Duration类| isZero()方法与示例

持续时间类isZero()方法 (Duration Class isZero() method) isZero() method is available in java.time package. isZero()方法在java.time包中可用。 isZero() method is used to check whether this Duration object holds the value of length is 0 or not. isZero()方法用…

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

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

mysql语句数据库_数据库的Mysql语句

数据库的mysql语句: 1.连接数据库 mysql -u root -p2.显示数据库 show databases(db);3.选择数据库 use 数据库名;4.显示数据库中的表 show tables;基本数据操作:增删改查1.增 :insert into 表名(字段1,字段2…)values (值1,值2…);2.删 :delete from 表名 where 条件;3.改 :up…

java clock计时_Java Clock类| systemUTC()方法与示例

java clock计时Clock Class systemUTC()方法 (Clock Class systemUTC() method) systemUTC() method is available in java.time package. systemUTC()方法在java.time包中可用。 systemUTC() method is used to get a Clock that implements the suitable system clock in the…

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

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