ABP從入門到精通(4):使用基于JWT標準的Token訪問WebApi

本人博客園地址:http://www.cnblogs.com/stulzq,目前博文會先發(fā)在博客園,然后同步簡書,目前不是用的MarkDown,所以同步過來的時候樣式可能不合理的地方,請諒解。

項目:asp.net zero 4.2.0 .net core(1.1) 版本

我們做項目的時候可能會遇到需要提供api給app調用,ABP動態(tài)生成的WebApi提供了方便的基于JWT標準的Token訪問方式供我們訪問API,不用在代碼上做任何改動,很方便有木有!

一.什么是JWT

Json web token (JWT), 是為了在網(wǎng)絡應用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也可以增加一些額外的其它業(yè)務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密。

這里就不詳細介紹JWT了,JWT的詳細介紹可以查看簡書的這篇文章,寫得非常詳細:http://www.itdecent.cn/p/576dbf44b2ae

二.ABP的WebApi訪問控制

asp.net zero core是通過IdentityServer4來實現(xiàn)的認證、授權,關于IdentityServer4介紹可以查看我前面的博文ASP.NET Core身份認證服務框架IdentityServer4-整體介紹

下面我簡單畫了一張圖來表示流程,其中API訪問認證就是有IdentityServer4來實現(xiàn)的,主要有兩種認證方式,一種是通過Cookie主要用于通過瀏覽器訪問,一種是通過Token訪問,主要用于APP、或者其他服務訪問。

三.申請Token

http://localhost:4999 項目地址

ABP已經(jīng)為我們實現(xiàn)好了Token獲取和驗證。

需要注意的是配置ServerRootAddress,如下圖

1.首先運行webapi項目(asp.net zero core項目說明

訪問地址http://localhost:4999/api/TokenAuth/Authenticate申請Token,提交參數(shù):用戶名、密碼

{"userNameOrEmailAddress":"admin","password":"123456"}

返回結果:

1{2"result": {3"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyIiwibmFtZSI6ImFkbWluIiwiQXNwTmV0LklkZW50aXR5LlNlY3VyaXR5U3RhbXAiOiJhMGU5M2Q0Yi01ZDk3LTFiZDktMTRkYS0zOWUwOTk4ODVhOTgiLCJyb2xlIjoiQWRtaW4iLCJodHRwOi8vd3d3LmFzcG5ldGJvaWxlcnBsYXRlLmNvbS9pZGVudGl0eS9jbGFpbXMvdGVuYW50SWQiOiIxIiwianRpIjoiODJkOTQ3M2EtMGE0Yy00MWZhLWI4ZDMtMzUzODJkMjJkOGFmIiwiaWF0IjoxNTAzNDY4NjM2LCJuYmYiOjE1MDM0Njg2MzYsImV4cCI6MTUwMzU1NTAzNiwiaXNzIjoiQWJwWmVyb1RlbXBsYXRlIiwiYXVkIjoiQWJwWmVyb1RlbXBsYXRlIn0.DnqpCFB2hjeYtEKd-RnJe4i4DmZVfo7EVnTXjrE18oY",4"encryptedAccessToken":"wNYmO41/48SHNstaLVXxHCCre29BZQl1NhC6NM3R3rwZiL572M4gBaHf6sHsTGZfcntBdt0YdGxxOmZDW4iy5jqe38W4yYK8C/ZyrckjUp2HPGDmagvdis58EyNMpU3nSRtiAxQDeAI9GbjKTvJK8UALab3hu556RViMrW+sbfD6HYigjq8CLQVBA5R83I4MwVGFWK2UXTBm3s7vfMr3TB15clrtMORUi6LxUCXaN4osbXSmoPSqtypvEfD/jDFAiXbqJaeIO/bwImWsbtZdFngCPgn5qtJ0OMb6XEFCs8YoBsZk4eA5dUqw/aji2wGLFEp9jNiDyiJ32IRLd8/Jc6J2zqd/zq2V7T53Yd3wVN9EvzZQ433LHWxEIVdaZT4LZQdkSbnXLbGNsQ2NHDpCmfTlr020TknJiC7EvrhsIam9qluWnUJ1XQbHhV+QKpLGWKmDAYC6V83wmmZVe0nEy19Kyerds65dsF2TZDXLOfibnqAQ8l+hnxFG5g33bjuia3mV2QyaAJ0YjPORgNyeJRlJAruT22Pls9ydIwDJJGGIQ5WLP0LkFYgH15qsL0bnNSUxcjChQ8gyva+MkVJ6GS+SLEumyCa5gLA6PrSGkrnTd7ssDQskbvv/B2E4UbI2Mol/yLwmtmy4rIRVhZikz9HbuqZjuNyGbKhhLnb/ZOo=",5"expireInSeconds":86400,6"shouldResetPassword":false,7"passwordResetCode":null,8"userId":0,9"requiresTwoFactorVerification":false,10"twoFactorAuthProviders":null,11"twoFactorRememberClientToken":null,12"returnUrl":null13},14"targetUrl":null,15"success":true,16"error":null,17"unAuthorizedRequest":false,18"__abp":true19}

其中?accessToken 就是我們申請的token。

四.使用Token訪問api

在請求頭中加入?Authorization, 值為'Bearer ' + token 中間有個空格,請注意

Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyIiwibmFtZSI6ImFkbWluIiwiQXNwTmV0LklkZW50aXR5LlNlY3VyaXR5U3RhbXAiOiJhMGU5M2Q0Yi01ZDk3LTFiZDktMTRkYS0zOWUwOTk4ODVhOTgiLCJyb2xlIjoiQWRtaW4iLCJodHRwOi8vd3d3LmFzcG5ldGJvaWxlcnBsYXRlLmNvbS9pZGVudGl0eS9jbGFpbXMvdGVuYW50SWQiOiIxIiwianRpIjoiZWYzOGMzZDgtNzBkNC00YjkzLWFmNDAtMDYwZGJkNmI1YjEzIiwiaWF0IjoxNTAzNDY3NzUzLCJuYmYiOjE1MDM0Njc3NTMsImV4cCI6MTUwMzU1NDE1MywiaXNzIjoiQWJwWmVyb1RlbXBsYXRlIiwiYXVkIjoiQWJwWmVyb1RlbXBsYXRlIn0.yXV9BBWb2dxN_o8WFPWH8GrPjP2gn0FavhyCOMf3Gaw

返回結果:

調用成功!

如果你覺得寫的不錯,請點一下的“喜歡”,這是對我分享技術經(jīng)驗的支持,謝謝!

聲明:原創(chuàng)博客請在轉載時保留原文鏈接或者在文章開頭加上本人博客地址,如發(fā)現(xiàn)錯誤,歡迎批評指正。凡是轉載于本人的文章,不能設置打賞功能,如有特殊需求請與本人聯(lián)系!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容