ASP.NET WebApi 基于JWT實現Token簽名認證

一、前言

開發提供數據的WebApi服務,最重要的是數據的安全性。那么對于我們來說,如何確保數據的安全將會是需要思考的問題。在ASP.NET WebService服務中可以通過SoapHead驗證機制來實現,那么在ASP.NET WebApi中我們應該如何保證我們的接口安全呢?這次給大家分享一種基于JWT方式解決方案。

1.1、本次分享包含知識點如下:

1)、對ASP.NET WebApi 如何實現身份認證進一步了解和學習。

2)、掌握.NET中的JWT組件的基本運用。

3)、.NET開源輕量級HTTP網絡請求框架RestSharp在ASP.NET WebApi中的基本運用。

4)、ASP.NET WebAPI自定義HTTP參數綁定支持多參數POST請求。(強烈推薦)

5)、ASP.NET WebApi 基于JWT實現Token簽名認證。

1.2、一句話總結:今天我們要解決的問題?

ASP.NET WebAPI如何保證客戶端以安全的方式進行訪問。

廢話不多說,直接上干貨,我們不生產干貨,我們只是干貨的搬運

二、概念名稱含義介紹

2.1、什么是JWT?

JSON Web Token (JWT)是一個開放標準(RFC 7519),它定義了一種緊湊的、自包含的方式,用于作為JSON對象在各方之間安全地傳輸信息。該信息可以被驗證和信任,因為它是數字簽名的。

2.2、JWT長什么樣?

JWT是由三段信息構成的,將這三段信息文本用.鏈接一起就構成了Jwt字符串。

?

JWT結構體

2.3、JWT的構成

第一部分我們稱它為頭部(header),第二部分我們稱其為載荷(payload,),第三部分是簽證(signature).

Header

header典型的由兩部分組成:token的類型(“JWT”)和算法名稱(比如:HMAC SHA256或者RSA等等)。

例如:

?  }

  JWT結構Header

?

然后,用Base64對這個JSON編碼就得到JWT的第一部分

Payload

JWT的第二部分是payload,它包含聲明(要求)。聲明是關于實體(通常是用戶)和其他數據的聲明。

聲明有三種類型: registered, public 和 private。

Registered claims : 這里有一組預定義的聲明,它們不是強制的,但是推薦。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。

Public claims : 可以隨意定義。

Private claims : 用于在同意使用它們的各方之間共享信息,并且不是注冊的或公開的聲明。

下面是一個例子:

  }

對payload進行Base64編碼就得到JWT的第二部分

注意,不要在JWT的payload或header中放置敏感信息,除非它們是加密的。

Signature

為了得到簽名部分,你必須有編碼過的header、編碼過的payload、一個秘鑰,簽名算法是header中指定的那個,然對它們簽名即可。例如:HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)簽名是用于驗證消息在傳遞過程中有沒有被更改,并且,對于使用私鑰簽名的token,它還可以驗證JWT的發送方是否為它所稱的發送方。?

三、WebApi基于JWT實現Token簽名認證原理講解

3.1、ASP.NET WebAPI如何保證客戶端以安全的方式進行訪問

ASP.NET WebAPI?如何保證接口的安全?先說一下何為安全?我們需要解決什么問題?

調用安全:由于WebService是暴露在公網中,怎么防止非法用戶調用我們的服務呢?因此我們需要解決:認證問題。

數據傳輸安全:由于我們的數據都是通過明文在網絡上進行傳輸很容易被竊取到。因此我們需要解決:數據被竊取問題。

以上解釋僅僅是阿笨狹義的理解;網絡安全還包括很多方面,會話劫持、會話被篡改等等。

總結:我們可以通過Token驗證機制來保證WebAPI?的認證使用;可以通過HTTPS來保證數據的加密,防止網絡偵聽!

?

基于JWT實現Token簽名認證原理圖

?

3.2、基于JWT實現Token簽名認證基本思路如下:

基本流程上是這樣的:

●用戶使用用戶名密碼來請求服務器。

●服務器進行驗證用戶的信息。

●服務器通過驗證發送給用戶一個token。

●客戶端存儲token,并在每次請求時附送上這個token值。

●服務端驗證token值,并返回數據。

四、實戰源碼在線實例演示

?

登錄

?

?

基于JWT實現Token簽名認證

?

?

五、總結

本次分享課程《ASP.NET WebApi 基于JWT實現Token簽名認證》阿笨給大家分享了在寫開放的WebAPI接口時是如何保證數據的安全性的?在此總結一下需要注意的幾點事項:

一、JTW注意事項:?

1)、不應該在jwt的payload部分存放敏感信息,因為該部分是客戶端可解密的部分。

2)、保護好secret私鑰,該私鑰非常重要。

3)、如果可以,請使用https協議。

注意:secret是保存在服務器端的,jwt的簽發生成也是在服務器端的,secret就是用來進行jwt的簽發和jwt的驗證,所以,它就是你服務端的私鑰,在任何場景都不應該流露出去。一旦客戶端得知這個secret, 那就意味著客戶端是可以自我簽發jwt了。

二、JWT具備的優勢特點如下:

1)、安全性比較高,加上密匙加密而且支持多種算法。

2)、攜帶的信息是自定義的,而且可以做到驗證token是否過期。

3)、驗證信息可以由前端保存,后端不需要為保存token消耗內存。

俗話說的好:師父領進門修行在個人,希望大家在學習的道路上一直堅持下去!

轉載于:https://www.cnblogs.com/zwalter/p/9625866.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cage驗證碼生成器快速上手

Cage小巧,好用。這里在官方基礎例子基礎上做了擴展: 12345678910111213141516171819202122232425262728293031323334package com.lavasoft.ntv.web.common; import com.github.cage.IGenerator; import java.util.Random; /*** 驗證碼生成器 * * author …

馬云:未來無工可打,人工智能發展紅利還在10年以后

馬云雖然已經退出阿里巴巴,但作為一代商業傳奇他所說的話,還十分據有影響力。關于人工智能,馬云提出過不少預測性言論。未來10年,房子、車子都不在值錢。面對人工智能時代,未來傳統行業大部分會消失。更有厲害的&#…

如何更改您的iPhone鈴聲

The problem with having a popular phone like an iPhone is that, by default, everyone has the same ringtone. If you want to give your iPhone a more personal sound, here’s how to do it. 擁有像iPhone這樣的流行手機的問題是,默認情況下,每個…

【ACM-ICPC 2018 沈陽賽區網絡預賽 I】Lattice's basics in digital electronics

【鏈接】 我是鏈接,點我呀:) 【題意】 【題解】 每個單詞的前綴都不同。 不能更明示了... 裸的字典樹。 模擬一下。輸出一下就ojbk了。 【代碼】 #include <bits/stdc.h> #define LL long long #define rep1(i,a,b) for (int i a;i < b;i) #define rep2(i,a,b) for…

扒一扒那些年我們遇到的奇葩代碼

前言 本文首發于公眾號【一名打字員】 在工作中&#xff0c;我們通常會遇到傳說中的“祖傳”代碼&#xff0c;有些是否讓我們感到哭笑不得&#xff0c;今天本猿整理一下自己以及網絡上出現過的奇葩代碼。來源于互聯網的均會標明出處。 TOP1 當仁不讓的當然是傳說中的“睡排序”…

相對濕度與絕對濕度_如何監視家里的濕度水平

相對濕度與絕對濕度High humidity is no fun, and neither is low humidity—you want a good balance between the two. Here’s how to monitor the humidity in your house so that you can make the proper adjustments. 高濕度無濟于事&#xff0c;低濕度也無濟于事-您希望…

基于redis實現的扣減庫存

2019獨角獸企業重金招聘Python工程師標準>>> 在日常開發中有很多地方都有類似扣減庫存的操作&#xff0c;比如電商系統中的商品庫存&#xff0c;抽獎系統中的獎品庫存等。 解決方案 使用mysql數據庫&#xff0c;使用一個字段來存儲庫存&#xff0c;每次扣減庫存去更…

JavaScript 使用random()生成隨機數

function myFunction() { var a Math.floor(Math.random()*10);return a;} // 記住 Math.random() 永遠不會返回 1。同時因為我們是在用 Math.floor() 向下取整&#xff0c;所以最終我們獲得的結果不可能有 20。這確保了我們獲得了一個在0到19之間的整數。 把操作連綴起來&…

plex 亂碼_Plex Media Center現在支持播客

plex 亂碼Plex is adding beta support for podcasts to iOS, Android, Roku, and Plex Web today, alongside a custom home screen for mobile users. Plex現在為iOS&#xff0c;Android&#xff0c;Roku和Plex Web的播客添加了beta支持&#xff0c;同時為移動用戶提供了自定…

Add a All Document Folder

本文出自Simmy的個人blog&#xff1a;西米在線 http://simmyonline.com/archives/54.html right clickSearch Folder-New Search Folder-Custom-Create a custom folder 本文轉simmy51CTO博客&#xff0c;原文鏈接&#xff1a;http://blog.51cto.com/helpdesk/122327&#xff0…

Oracle服務器修改IP后

機房有兩套網絡&#xff0c;一套辦公網&#xff0c;一套機房的內網&#xff0c;辦公網可以通過vpn在其他地方訪問&#xff0c;內網只能在公司辦公室訪問。團隊有同事去外地辦公&#xff0c;開發的時候需要通過客戶端直連數據庫&#xff0c;于是把數據庫服務器的網線換到辦公網的…

代理IP對直播平臺的影響與關系-國內多IP曇花一現

1.代理IP的作用1>.訪問一些單位或團體內部資源&#xff0c;如某大學FTP(前提是該代理地址在該資源 的允許訪問范圍之內)&#xff0c;使用網絡內地址段免費代理服務器&#xff0c;就可以用于對 網絡開放的各類FTP下載上傳&#xff0c;以及各類資料查詢共享等服務。國內站群整…

ios12徹底關閉siri_Siri正在iOS 12中獲取自定義語音操作

ios12徹底關閉siriSiri is about to get a lot more powerful. Custom voice commands for any app will allow you to say “Hey Siri, I lost my keys” to instantly launch an app that will help you find them. Siri將變得更加強大。 針對任何應用程序的自定義語音命令將…

spring cloud連載第一篇之bootstrap context

1. Spring Cloud Context: Application Context Services&#xff08;應用上下文服務&#xff09; 1.1 The Bootstrap Application Context&#xff08;引導上下文&#xff09; 一個spring cloud應用會創建一個“bootstrap”context&#xff0c;它是主應用的parent context。它…

過Postfix構建Exchange Server 2010郵件網關部署系列三:安裝Exchange 2010先決性條件

1.將Exchange Server 2010服務器加入域。 2.在“開始”菜單上&#xff0c;依次導航到“所有程序”>“附件”>“Windows PowerShell”。打開提升的 Windows PowerShell 控制臺并運行以下命令&#xff1a; Import-Module ServerManager 3.使用 Add-WindowsFeature cmdlet 安…

gmail收件箱標簽設置_通過多個收件箱實驗室有效管理您的Gmail

gmail收件箱標簽設置Most people have more than one email account and if you are using Gmail it’s easy to get things set up so that all of your messages can be accessed in the same place. But if you would prefer to keep things ‘together yet separate’ the …

清華生命學院 2017 就業報告:就業率僅 51%

時間&#xff1a;20170406 一、截至目前生命學院整體就業情況 1.1 系統就業率 1.2 實際排查就業率 (6092)/(68230)51.06%二、本科生就業排查 2017 屆本科生 68 人&#xff0c;已確定去向 60 人&#xff08;已登記去向 32 人&#xff09; 2.1 確定去向的 60 人中 國內深造 35 人…

程序改變了命運,程序生活一天比一天好,對未來也充滿了希望

為什么80%的碼農都做不了架構師&#xff1f;>>> 我出生在內蒙古自治區興安盟扎賚特旗寶力根花蘇木&#xff0c;那里是少數民族蒙古族聚居區&#xff0c;20-30年前與現代城市文明有些差距。當還在讀小學的時在中學當數學老師的爸爸去深圳出差學習&#xff0c;順路在…

powershell 變量_極客學院:學習PowerShell變量,輸入和輸出

powershell 變量As we move away from simply running commands and move into writing full blown scripts, you will need a temporary place to store data. This is where variables come in. 隨著我們不再只是運行命令而轉而編寫完整的腳本&#xff0c;您將需要一個臨時位…

offsetTop、offsetLeft、offsetWidth、offsetHeight、style中的樣式

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 假設 obj 為某個 HTML 控件。 obj.offsetTop 指 obj 距離上方或上層控件的位置&#xff0c;整型&#xff0c;單位像素。 obj.offsetLeft 指 obj 距離左方或上層控件的位置&#xff0…