1. 程式人生 > >ABP從入門到精通(4) 使用基於JWT標準的Token訪問WebApi

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

               

專案:asp.net zero 4.2.0 .net core(1.1) 版本

我們做專案的時候可能會遇到需要提供api給app呼叫,ABP動態生成的WebApi提供了方便的基於JWT標準的Token訪問方式供我們訪問API,不用在程式碼上做任何改動,很方便有木有!

一.什麼是JWT

Json web token (JWT), 是為了在網路應用環境間傳遞宣告而執行的一種基於JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用於分散式站點的單點登入(SSO)場景。JWT的宣告一般被用來在身份提供者和服務提供者間傳遞被認證的使用者身份資訊,以便於從資源

伺服器獲取資源,也可以增加一些額外的其它業務邏輯所必須的宣告資訊,該token也可直接被用於認證,也可被加密。

 

這裡就不詳細介紹JWT了,JWT的詳細介紹可以檢視這篇文章,寫得非常詳細: JWT【JSON Web Token】 簡述

八幅漫畫理解使用JSON Web Token設計單點登入系統

 

二.ABP的WebApi訪問控制

asp.net zero core是通過IdentityServer4來實現的認證、授權,關於IdentityServer4介紹可以檢視我前面的博文 ASP.NET Core身份認證服務框架IdentityServer4-整體介紹

 

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

640?wx_fmt=png&wxfrom=5&wx_lazy=1

三.申請Token

 

http://localhost:4999 專案地址

 

ABP已經為我們實現好了Token獲取和驗證。

 

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

0?wx_fmt=png

 

 

 

1.首先執行webapi專案(asp.net zero core專案說明)

 

訪問地址 http://localhost:4999/api/TokenAuth/Authenticate 申請Token,提交引數:使用者名稱、密碼

 

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

 

0?wx_fmt=png

返回結果:

0?wx_fmt=png


 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": null
13    },    
14     "targetUrl": null,
15     "success": true,
16     "error": null,
17     "unAuthorizedRequest": false,
18     "__abp": true
19 }

 

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

 

四.使用Token訪問api

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

0?wx_fmt=png

Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyIiwibmFtZSI6ImFkbWluIiwiQXNwTmV0LklkZW50aXR5LlNlY3VyaXR5U3RhbXAiOiJhMGU5M2Q0Yi01ZDk3LTFiZDktMTRkYS0zOWUwOTk4ODVhOTgiLCJyb2xlIjoiQWRtaW4iLCJodHRwOi8vd3d3LmFzcG5ldGJvaWxlcnBsYXRlLmNvbS9pZGVudGl0eS9jbGFpbXMvdGVuYW50SWQiOiIxIiwianRpIjoiZWYzOGMzZDgtNzBkNC00YjkzLWFmNDAtMDYwZGJkNmI1YjEzIiwiaWF0IjoxNTAzNDY3NzUzLCJuYmYiOjE1MDM0Njc3NTMsImV4cCI6MTUwMzU1NDE1MywiaXNzIjoiQWJwWmVyb1RlbXBsYXRlIiwiYXVkIjoiQWJwWmVyb1RlbXBsYXRlIn0.yXV9BBWb2dxN_o8WFPWH8GrPjP2gn0FavhyCOMf3Gaw

 

返回結果:

0?wx_fmt=png

呼叫成功!

 

.NET Core 交流群:4656606

相關文章:

原文地址:http://www.cnblogs.com/stulzq/p/7417548.html


.NET社群新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

640?wx_fmt=jpeg

           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow