ASP.NET Web API 2基於令牌的身份驗證


ASP.NET Web API 2基於令牌的身份驗證

基於令牌的認證

    我們知道WEB網站的身份驗證一般通過session或者cookie完成的,登錄成功后客戶端發送的任何請求都帶上cookie,服務端根據客戶端發送來的cookie來識別用戶。

    WEB API使用這樣的方法不是很適合,於是就有了基於令牌的認證,使用令牌認證有幾個好處:可擴展性、松散耦合、移動終端調用比較簡單等等,別人都用上了,你還有理由不用嗎?

    下面我們花個20分鍾的時間來實現一個簡單的WEB API token認證:

 

Step 1: 新建一個空的WEB API項目,項目名稱就設置為WebApi

 

Step 2: 在Models目錄下新建一個 Product 類 :

按 Ctrl+C 復制代碼
按 Ctrl+C 復制代碼

Step 3:在Controllers目錄下新建一個 ProductsController 類

按 Ctrl+C 復制代碼
按 Ctrl+C 復制代碼

F5運行后就可以使用這個簡單的WebApi了,測試api可以使用Postman工具:

    獲取所有數據  http://localhost:1234/api/products

    獲取內碼為1的數據  http://localhost:1234/api/products/1

    查詢category=的數據  http://localhost:1234/api/products?category=Groceries

 

    可以看到這個產品的API是公開訪問的,沒有任何驗證,這樣不是很安全,下一步我將加上token驗證。

 

Step 4:安裝所需的NuGet包:

打開NuGet包管理器控制台,然后輸入如下指令:

Install-Package Microsoft.AspNet.WebApi.Owin -Version 5.1.2
Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0
Install-Package Microsoft.AspNet.Identity.Owin -Version 2.0.1 Install-Package Microsoft.Owin.Cors -Version 2.1.0 Install-Package EntityFramework -Version 6.0.0 

Step 5:在項目根目錄下添加Owin“Startup”類

按 Ctrl+C 復制代碼
按 Ctrl+C 復制代碼

 

Step 6:刪除Global.asax 

我們已經設置了Setup類,就不需要Global了,刪掉干凈;

 

Step 7:在項目根目錄下添加驗證類 SimpleAuthorizationServerProvider,為了簡單用戶的驗證部分我們省略掉;

按 Ctrl+C 復制代碼
按 Ctrl+C 復制代碼

 

Step 7:讓CORS起作用

在ASP.NET Web API中啟用OAuth的Access Token驗證非常簡單,只需在相應的Controller或Action加上[Authorize]標記

修改ProductsController類

按 Ctrl+C 復制代碼
按 Ctrl+C 復制代碼

 

現在我們再次直接GET http://localhost:23477/api/products/ 會返回401錯誤,請求被拒絕

 

獲取token, POST   http://localhost:23477/token

參數BODY x-www-form-urlencoded 格式:

grant_type=password

username=admin 

password=123456

返回200狀態,內容為:

復制代碼
復制代碼
{
  "access_token": "eLjAu3Alm2YWjJKXmX_fLY07P6vbIzxasFECkDap3KIE0Ydp7IGhTgrzWLtPdgrK46rfAB-OmJSG5C8Bh-PkfG3XrGS0uDea2KBXyoWSR11evTGJiVIyXny3Ih2DkH04qH2T_Ar4kIjcAngPtUnsEVex26tV4QHIrjCq5SlkOdfdAa9Pnl98QVwYH47yO-zlc55bwMgpR2J4fQLyNzWVHNZpH3DbOcHQ3Yenemr6XhM",
  "token_type": "bearer",
  "expires_in": 86399
}
復制代碼
復制代碼

只要在http請求頭中加上Authorization:bearer Token就可以成功訪問API就成功了:

GET   http://localhost:23477/api/products/

Authorization : bearer eLjAu3Alm2YWjJKXmX_fLY07P6vbIzxasFECkDap3KIE0Ydp7IGhTgrzWLtPdgrK46rfAB-OmJSG5C8Bh-PkfG3XrGS0uDea2KBXyoWSR11evTGJiVIyXny3Ih2DkH04qH2T_Ar4kIjcAngPtUnsEVex26tV4QHIrjCq5SlkOdfdAa9Pnl98QVwYH47yO-zlc55bwMgpR2J4fQLyNzWVHNZpH3DbOcHQ3Yenemr6XhM

 

這樣我們就完成了簡單的WEB API的token驗證~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM