webapi随机调用_BeetleX之webapi验证插件JWT集成
????????對(duì)于webapi服務(wù)應(yīng)用很多時(shí)候需要制訂訪問(wèn)限制,在前面的章節(jié)也講述了組件如何制訂控制器訪問(wèn)控制;但到了實(shí)際應(yīng)用要自己去編寫還是比較麻煩。為了讓訪問(wèn)控制更方便組件實(shí)現(xiàn)基于JWT的控制器訪問(wèn)控制組件BeetleX.FastHttpApi.Jwt;通過(guò)這個(gè)組件可以輕易地集成訪問(wèn)控制功能。
配置
????????先需要引用BeetleX.FastHttpApi.Jwt擴(kuò)展組件,然后針對(duì)HttpApiServer調(diào)用UseJWT擴(kuò)展方法即可。
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); }當(dāng)配置了JWT訪問(wèn)控制后,所有請(qǐng)求的api都會(huì)返回401錯(cuò)誤
使用
????????組件提供了AuthMark用于標(biāo)記控制器的針對(duì)JWT的驗(yàn)證情況,默認(rèn)不標(biāo)記的方法請(qǐng)求時(shí)都必須在Cookie:__beetlex_token或Header:Authorization中提供合法的JWT憑證信息。如果想某個(gè)方法不參與驗(yàn)證可以標(biāo)記上[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; }}以上控制器有三個(gè)方法
Login
該方法是把登陸信息寫入Cookie并返回,此方法標(biāo)記了?[AuthMark(AuthMarkType.Admin)],因此無(wú)須提供JWT憑證即可訪問(wèn)。
ListEmployee
該方法需要憑證訪問(wèn),并明確憑證中的角色是admin.
List
????????該方法需要提供憑證訪問(wèn)
在訪問(wèn)的時(shí)候需可以通過(guò)訪問(wèn)Login來(lái)獲取憑證,如果是網(wǎng)頁(yè)請(qǐng)求則無(wú)須返回,SetJwtToken方法會(huì)把憑證寫到Cookie中,接下來(lái)的請(qǐng)求會(huì)通過(guò)Cookie傳遞到服務(wù)處理。如果是其他途徑訪問(wèn),則需要把憑證設(shè)置到Header部的Authorization中;不管是那種方式提供憑證組件都能兼容處理。
????????當(dāng)憑證有效的情況,組件會(huì)把jwt_user和jwt_role注入到數(shù)據(jù)上下文中,這兩個(gè)信息分別是JWT憑證中用戶和角色;如果有需要直接在參數(shù)中定義相關(guān)變量名稱即可獲取。
Postman調(diào)用測(cè)試
獲取憑證
調(diào)用List
由于角色不是admin,因此訪問(wèn)ListEmployee會(huì)返回401錯(cuò)誤。接下來(lái)使用admin用戶登陸一次就可以正常訪問(wèn)ListEmployee方法了.
修改配置????????使用插件后會(huì)在程序中生成beetlex_jwtconfig.json文件{ "Issuer": null, "Audience": null, "JWTKeyED": "m60IIS4+DQR8K9eh0gjrlJPFvB042RyGhtS2jOHjSzyx4T7dZVBCAm51k9+fTEC1Ux066AH198KQgZpZh4Ejmd+a7/DKDi9Dg7quwkU85jmUADnEqGM7vOl8TOO16HrtUfoABVxQ60Tt92RGRjV8VJthxYdIX/B7XjMGTsJLjpo="}以上信息在初始化的時(shí)候隨機(jī)生成,可以根據(jù)自己需求進(jìn)行更改。下載示例鏈接:https://pan.baidu.com/s/1ZP600HkfBc57O0gtv7npVA
提取碼:3oik
【BeetleX通訊框架代碼詳解】
BeetleX
開(kāi)源跨平臺(tái)通訊框架(支持TLS)
輕松實(shí)現(xiàn)高性能:tcp、http、websocket、redis、rpc和網(wǎng)關(guān)等服務(wù)應(yīng)用
https://beetlex.io
如果你想了解某方面的知識(shí)或文章可以把想法發(fā)送到
henryfan@msn.com|admin@beetlex.io
總結(jié)
以上是生活随笔為你收集整理的webapi随机调用_BeetleX之webapi验证插件JWT集成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微商相册一直显示服务器偷懒,【小程序】微
- 下一篇: kafka分区与分组原理_大数据技术-K