ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi
項(xiàng)目:asp.net zero 4.2.0 .net core(1.1) 版本
我們做項(xiàng)目的時(shí)候可能會(huì)遇到需要提供api給app調(diào)用,ABP動(dòng)態(tài)生成的WebApi提供了方便的基于JWT標(biāo)準(zhǔn)的Token訪問方式供我們?cè)L問API,不用在代碼上做任何改動(dòng),很方便有木有!
一.什么是JWT
Json web token (JWT), 是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)((RFC 7519).該token被設(shè)計(jì)為緊湊且安全的,特別適用于分布式站點(diǎn)的單點(diǎn)登錄(SSO)場(chǎng)景。JWT的聲明一般被用來在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。
?
這里就不詳細(xì)介紹JWT了,JWT的詳細(xì)介紹可以查看這篇文章,寫得非常詳細(xì):?JWT【JSON Web Token】 簡述,
八幅漫畫理解使用JSON Web Token設(shè)計(jì)單點(diǎn)登錄系統(tǒng)
?
二.ABP的WebApi訪問控制
asp.net zero core是通過IdentityServer4來實(shí)現(xiàn)的認(rèn)證、授權(quán),關(guān)于IdentityServer4介紹可以查看我前面的博文?ASP.NET Core身份認(rèn)證服務(wù)框架IdentityServer4-整體介紹
?
下面我簡單畫了一張圖來表示流程,其中API訪問認(rèn)證就是有IdentityServer4來實(shí)現(xiàn)的,主要有兩種認(rèn)證方式,一種是通過Cookie主要用于通過瀏覽器訪問,一種是通過Token訪問,主要用于APP、或者其他服務(wù)訪問。
三.申請(qǐng)Token
?
http://localhost:4999 項(xiàng)目地址
?
ABP已經(jīng)為我們實(shí)現(xiàn)好了Token獲取和驗(yàn)證。
?
需要注意的是配置ServerRootAddress,如下圖
?
?
?
1.首先運(yùn)行webapi項(xiàng)目(asp.net zero core項(xiàng)目說明)
?
訪問地址?http://localhost:4999/api/TokenAuth/Authenticate?申請(qǐng)Token,提交參數(shù):用戶名、密碼
?
{ ? ?"userNameOrEmailAddress":"admin", ? ?"password":"123456"}?
返回結(jié)果:
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": null
13 ? ?}, ? ?
14 "targetUrl": null,
15 "success": true,
16 "error": null,
17 "unAuthorizedRequest": false,
18 "__abp": true
19 }
?
其中?accessToken 就是我們申請(qǐng)的token。
?
四.使用Token訪問api
在請(qǐng)求頭中加入?Authorization, 值為'Bearer ' + token 中間有個(gè)空格,請(qǐng)注意
Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyIiwibmFtZSI6ImFkbWluIiwiQXNwTmV0LklkZW50aXR5LlNlY3VyaXR5U3RhbXAiOiJhMGU5M2Q0Yi01ZDk3LTFiZDktMTRkYS0zOWUwOTk4ODVhOTgiLCJyb2xlIjoiQWRtaW4iLCJodHRwOi8vd3d3LmFzcG5ldGJvaWxlcnBsYXRlLmNvbS9pZGVudGl0eS9jbGFpbXMvdGVuYW50SWQiOiIxIiwianRpIjoiZWYzOGMzZDgtNzBkNC00YjkzLWFmNDAtMDYwZGJkNmI1YjEzIiwiaWF0IjoxNTAzNDY3NzUzLCJuYmYiOjE1MDM0Njc3NTMsImV4cCI6MTUwMzU1NDE1MywiaXNzIjoiQWJwWmVyb1RlbXBsYXRlIiwiYXVkIjoiQWJwWmVyb1RlbXBsYXRlIn0.yXV9BBWb2dxN_o8WFPWH8GrPjP2gn0FavhyCOMf3Gaw?
返回結(jié)果:
調(diào)用成功!
?
.NET Core 交流群:4656606相關(guān)文章:
-
ABP從入門到精通(1):aspnet-zero-core項(xiàng)目啟動(dòng)及各項(xiàng)目源碼說明
-
ABP從入門到精通(2):aspnet-zero-core 使用MySql數(shù)據(jù)庫
-
ABP從入門到精通(3):aspnet-zero-core 使用Redis緩存
原文地址:http://www.cnblogs.com/stulzq/p/7417548.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core 2.0 依赖注
- 下一篇: 微软Tech Summit 2017,等