1. 程式人生 > >初識JWT(java web token)

初識JWT(java web token)

JWT(Json Web Token)是JSON風格輕量級的授權和身份認證規範,可實現無狀態、分散式的Web應用授權。

個人理解
我認為它是分散式session的替代物,在沒有jwt之前,我們可以用redis等快取伺服器來充當session儲存伺服器,使用者根據cookic中的token到redis伺服器取使用者資訊,這也是單點登入的一種設計方案。而JWT的出現,使成本更低,我們可以單獨部署一臺授權伺服器,甚至把授權伺服器和應用部署在同一臺伺服器,來驗證使用者資訊並返回一個jwt,該jwt儲存在使用者端(可儲存在cookic中)。當用戶需要訪問一個路徑、資源時,在http請求的頭部中新增Authorization:bearer <token>
,token在登入認證後由伺服器生成並返回,就可以訪問該資源,這也使得跨域訪問(到其他的伺服器中獲取資源)更方便,因為授權資訊已經存在於http請求中了,而且該授權資訊的資料量不大,也避免不同伺服器不同cookic實現帶來的阻礙。不同語言和平臺,只要伺服器端實現了jwt授權認證,使用者的token就可以隨時驗證許可權而後獲取資源,同時也避免了為了驗證使用者資訊而多次查詢資料庫。

JWT授權時序圖

一個JWT由3個json部分組成,通過base64Url編碼後用.符號來分隔,最終的JWT形式:xxxxx.yyyyy.zzzzz
header(頭部)
{
  "alg":"HS256",  // 加密演算法
  "typ":"JWT"  // 型別
}

payload
(類似Http的body),可以包含多個claim(claim的key通常是由3個字元組成的,值通常是使用者資訊和另外的元資料)
claim分為3種:
預備的:JWT預先實現的,比如(iss (issuer), exp (expiration time), sub (subject), aud (audience))等;
公有的:定義包含namespace的uri,或者定義一些已經在IANA註冊的claim;
私有的:定義多個應用約定好要共享的資料。
payload的例子
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

signature
(簽名,伺服器認準此簽名進行授權)
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
上面就是一個簽名,HMACSHA256是我們在header中指定的加密演算法,對base64UrlEncode(header)、
base64UrlEncode(payload)和secret進行加密。用來驗證請求傳送者的身份和確保JWT中途沒有被竄改。

一個完整的JWT 


與session的主要區別
JWT把使用者資訊加密後存放在http的header中,可以不使用cookic,更加通用,跟restful配置更順手,可以跨平臺跨語言,比較適合分散式應用。但是對於規模較小的應用,比如單伺服器應用,還是用session比較好,不用特意在伺服器中實現JWT授權。

JWT的缺點
1.token的有效性太過依賴生成token時設定的過期時間,使用者一旦拿到token就可以隨時訪問伺服器,伺服器對token不可控,只能等它失效;
2.只能與https配置使用,否則token會被竊取,他人就可以偽裝成該token的持有者去各個伺服器獲取資料;
3.各個伺服器都得實現JWT,才可以相互請求資源。

這個連結是JWT的官網,裡面有JWT的介紹和各種語言對應的JWT library,對應的api在auth0這裡。

相關推薦

初識JWTjava web token

JWT(Json Web Token)是JSON風格輕量級的授權和身份認證規範,可實現無狀態、分散式的Web應用授權。個人理解 我認為它是分散式session的替代物,在沒有jwt之前,我們可以用re

APP使用者登入解決方案——JWTjava web token生成Token

什麼是JSON Web Token?JSON Web Token(JWT)是一個開放式標準(RFC 7519),它定義了一種緊湊且自包含的方式,用於在各方之間以JSON物件安全傳輸資訊。這些資訊可以通過數字簽名進行驗證和信任。可以使用祕密(使用HMAC演算法)或使用RSA的公

什麽是JWTJSON WEB TOKEN

加密 string style 直接 協議 策略 ade aud images 什麽是JWT Json web token(JWT)是為了網絡應用環境間傳遞聲明而執行的一種基於JSON的開發標準(RFC 7519),該token被設計為緊湊且安全的,特別適用於分

JWT JSON WEB Token正確使用場景

頁面包含 eth token 生成 example 各類 場景 bottom container https://www.jianshu.com/p/af8360b83a9f 講真,別再使用JWT了! ThoughtWorks中國 2017.08.16 08

理解JWTJSON Web Token認證及python實踐

原文:https://segmentfault.com/a/1190000010312468?utm_source=tag-newest 幾種常用的認證機制 HTTP Basic Auth HTTP Basic Auth 在HTTP中,基本認證是一種用來允許Web瀏覽器或其他客戶端程式在請求時

JWTJson Web Token框架 jjwt 教程

JSON Web Token(JWT)是一個非常輕巧的規範。這個規範允許我們使用JWT在使用者和伺服器之間傳遞安全可靠的資訊。和 Cookie-Session 的模式不同,JSON Web Token(JWT)使用 Token 替換了 SessionId 的資源訪問和狀態的保持。基於JWT

JWTJson Web Token

 跨域認證的問題 網際網路服務離不開使用者認證。一般流程是下面這樣。         1、使用者向伺服器傳送使用者名稱和密碼。         2、伺服器驗證通過後,在當前對話(session)裡面儲存相關資料,比如使用者角色、登入時間等等。         3、伺服

Python實現JWTJSON Web Token認證

作者介紹 張龍(zero),一線運維老鳥。致力於LINUX/PYTHON/開源技術研究。 常見認證方法 首先要明白,認證和授權是不同的。認證是判定使用者的合法性,授權是判定使用者的許可權級別是否可執行後續操作。這裡所講的僅含認證。 basic認證 這是http協議中所帶帶基本認證,是一

什麼是JWTJSON WEB TOKEN

原文傳送門 什麼是JWT Json web token(JWT)是為了網路應用環境間傳遞宣告而執行的一種基於JSON的開發標準(RFC 7519),該token被設計為緊湊且安全的,特別適用於分散式站點的單點登陸(SSO)場景。JWT的宣告一般被用來在

JWTJSON WEB TOKENS-一種無狀態的認證機制

轉載自:http://www.tuicool.com/articles/R7Rj6r3 JWT(JSON Web Tokens ) ———— 一種無狀態的認證機制 一、什麼是JWT? JWT是一種用於雙方之間傳遞安全資訊的簡潔的、URL安全的表述性宣告規範。JWT作

基於以太坊的區塊鏈瀏覽器java web開發

效果圖如下:這裡的交易值並不是以太幣,而是根據自己寫的智慧合約建立的代幣。交易詳情檢視賬號詳情,這裡賬號餘額是以太幣,不過是按照最小單位wei,這裡沒有換算程式碼下載地址:連結:https://github.com/haochaowu/spring-boot詳情可以看我之前發

選購和配置阿里雲伺服器Java web

1 購買伺服器 1.1 進入阿里雲服務官網,購買雲伺服器 ECS。 1.2 選擇下圖所示的預裝環境,配置和地域根據自己喜好選擇就行了,然後進行下一步購買就可以了。 經過上面操作,一個阿里雲伺服器的購買就完成了,下面我們來講下怎麼配置。 2 Win

JWTJSON Web Tokens的使用

由來 做了這麼長時間的web開發,從JAVA EE中的jsf,spring,hibernate框架,到spring web MVC,到用php框架thinkPHP,到現在的nodejs,我自己的看法是越來越喜歡乾淨整潔的web層,之前用jsf開發做view層的時候,用的

java web後端方向如何讓你的簡歷為你爭取到更多的面試機會,內容來自java web輕量級開發面試教程

java web輕量級開發面試教程 我們在做培訓時,會發現一個不合理的情況,一些程序員能力不錯,在公司裏也是技術牛人,但發出去的簡歷往往會石沈大海,沒有回復。對於剛畢業的大學生或工作年限在2年之內的程序員,這個情況會更嚴重。 這種情況下,其實不是你的能力有問題,而是簡歷篩選人(往往是人事

Java學習不走彎路教程18 Web框架

image tar 分享圖片 strong value doget 程序 aio size Web框架 一. 前言在前上一章教程中,我們實現了程序在Tomcat上的部署。本章將在上一章的基礎上,進一步擴展程序。 註:1.本文針對初學Java的同學訓練學習思路,請不要太糾結於

某小型公司持續整合工具jenkins實踐JAVA WEB、Android、IOS、Html

前言 本文可能是網上最全的一篇全端jenkins部署解決方案介紹的文章,一直以來,領導都想解決程式碼提交和打包問題,尤其是小公司,打包流程混亂,造成線上版本和程式碼庫git或svn中程式碼不一致問題。加入jenkins陣營,解決眾多發包難題,顯得刻不容緩。

阿里雲伺服器雲資料庫免費體驗Java Web詳細例項

一、效果展示 博主部署了兩個war包到阿里雲伺服器上,一個是沒有連線資料庫的,另外一個是連線了資料庫的。 (由於阿里雲伺服器免費使用15天,下面連結約2016年3月9日後無效) (3)頁面效果 二、阿里雲伺服器部署Java Web例項

從零配置雲伺服器Java web執行環境二、配置JAVA開發環境

二、配置JAVA開發環境 先進入我們的實力列表,右邊進入遠端連線。 這裡遠端連線1 輸入遠端連線密碼後連線成功,接著輸入系統登陸賬號密碼。(Unix系統輸入密碼都是不顯示在螢幕上的,是連小星星都沒有的。) 登陸成功後我們先新建一個目錄

關於URL+method、通用引數封裝的設計思路java web,SSM框架

起源 至於此,使用restful的api已經有一段時間,除了看起來優雅外,其餘反而增加了一些額外麻煩,比如: 1、form表單只支援get和post,為了支援put,delete還得寫轉換器 2、restful鼓勵有意義的url,比如刪除id為3的使用者,其url在cont

Java Web基礎知識之Servlet容器初始化web.xml

在之前典型的Java Web程式中,部署描述符web.xml是必不可少的,在這裡我們需要配置各種元件,包括Servlet、Filter和Listener等,如果使用過SpringMVC的話,應該會對在web.xml中配置org.springframework.w