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.pswp.cn/news/541490.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541490.shtml
英文地址,請注明出處:http://en.pswp.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 包瀏覽器創建完前面提到的兩個…