日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

jwt如何防止token被窃取_在吗?认识一下JWT(JSON Web Token)?

發(fā)布時間:2023/12/4 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jwt如何防止token被窃取_在吗?认识一下JWT(JSON Web Token)? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是JSON Web Token

官網(wǎng)介紹:

JSON Web Token(JWT)是一個開放標(biāo)準(zhǔn)(RFC 7519),它定義了一種緊湊且自包含的方式,用于在各方之間安全地將信息作為JSON對象傳輸。由于此信息是經(jīng)過數(shù)字簽名的,因此可以被驗證和信任??梢允褂妹孛?使用HMAC算法)或使用RSAECDSA的公用/專用密鑰對對JWT進(jìn)行簽名。

盡管可以對JWT進(jìn)行加密以在各方之間提供保密性,但我們將重點關(guān)注已簽名的令牌。簽名的令牌可以驗證其中包含的聲明的完整性,而加密的令牌則將這些聲明隱藏在其他方的面前。當(dāng)使用公鑰/私鑰對對令牌進(jìn)行簽名時,簽名還證明只有持有私鑰的一方才是對其進(jìn)行簽名的一方。

emmmm.......balabala一堆文字,那么我們來簡單總結(jié)下:

JWT是一個JSON信息傳輸?shù)拈_放標(biāo)準(zhǔn),它可以使用密鑰對信息進(jìn)行數(shù)字簽名,以確保信息是可驗證和可信任的。

JWT的結(jié)構(gòu)是什么?

JWT由三部分構(gòu)成:header(頭部)、payload(載荷)和signature(簽名)。 以緊湊的形式由這三部分組成,由“.“分隔。

因此,JWT通常如下所示。

xxxxx.yyyyy.zzzzz

讓我們把這串奇奇怪怪的東西分解開來:

header

header通常由兩部分組成:令牌的類型(即JWT)和所使用的簽名算法,例如HMAC SHA256或RSA等等。

例如:

{ ?"alg": "HS256", "typ": "JWT" }

顯而易見,這貨是一個json數(shù)據(jù),然后這貨會被Base64編碼形成JWT的第一部分,也就是xxxxx.yyyyy.zzzzz中的xxxxxx。

Payload

這貨是JWT的第二部分,叫載荷(負(fù)載),內(nèi)容也是一個json對象,它是存放有效信息的地方,它可以存放JWT提供的現(xiàn)成字段 :

  • iss: 該JWT的簽發(fā)者。
  • sub: 該JWT所面向的用戶。
  • aud: 接收該JWT的一方。
  • exp(expires): 什么時候過期,這里是一個Unix時間戳。
  • iat(issued at): 在什么時候簽發(fā)的。

舉個例子:

{??"iss": "www.baidu.com", "sub": "you",??"aud": "me", "name": "456", "admin": true,? "iat": 1584091337,? "exp": 1784091337,}

這貨同樣會被Base64編碼,然后形成JWT的第二部分,也就是xxxxx.yyyyy.zzzzz中的yyyyyy

Signature

這是JWT的第三部分,叫做簽名,此部分用于防止JWT內(nèi)容被篡改。將上面的兩個編碼后的字符串都用英文句號.連接在一起(頭部在前),就形成了

xxxxxx.yyyyyy

然后再使用header中聲明簽名算法進(jìn)行簽名。 如果要使用HMAC SHA256算法,則將通過以下方式創(chuàng)建簽名:

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

當(dāng)然,在加密的時候,我們還需要提供一個密鑰(secret),我們可以自己隨意指定。這樣就形成了JWT的第三部分,也就是xxxxx.yyyyy.zzzzz中的zzzzzz。

最后,我們把這三個部分拼在一起,就形成了一個完整的JWT。

下面展示了一個完整的JWT,它先對header和payload進(jìn)行編碼,最后用一個密鑰形成了簽名。

如果我們想試驗一下的話,可以在JWT的官網(wǎng)進(jìn)行debugger。貼一下官網(wǎng): https://jwt.io/

JSON Web Token認(rèn)證流程

什么時候應(yīng)該使用JSON Web Token?

以下是JSON Web Token 有用的一些情況:

  • 授權(quán):這是使用JWT的最常見方案。一旦用戶登錄,每個后續(xù)請求將包括JWT,從而允許用戶訪問該令牌允許的路由,服務(wù)和資源。單一登錄是當(dāng)今廣泛使用JWT的一項功能,因為它的開銷很小并且可以在不同的域中輕松使用。
  • 信息交換:JSON Web Token是在各方之間安全地傳輸信息的好方法。因為可以對JWT進(jìn)行簽名(例如,使用公鑰/私鑰對),所以您可以確定發(fā)件人是他們所說的人。此外,由于簽名是使用標(biāo)頭和有效負(fù)載計算的,因此您還可以驗證內(nèi)容是否遭到篡改。

那么,有人就會說了,道理我都懂,我應(yīng)該怎樣去實現(xiàn)呢?莫慌。。

如何實現(xiàn)?

接下來我會用python實現(xiàn)JWT,不想拉仇恨,但是,python大法好啊。。。。

在前后端分離的項目中,我們需要與前端約定一種身份認(rèn)證機制。當(dāng)用戶登錄的時候,后端會生成token,然后返回給前端,前端需要將token拿到并按照一定規(guī)則放到header中,在下一次請求的時候一并發(fā)送給后端,后端進(jìn)行token身份校驗。

這里我們約定前端請求后端服務(wù)時需要添加頭信息Authorization ,內(nèi)容為token。

我用的是fastapi web框架,搭建項目非??臁?/p>from datetime import timedelta, datetimeimport jwtfrom fastapi import FastAPI, HTTPException, Dependsfrom starlette.status import HTTP_401_UNAUTHORIZEDfrom starlette.requests import Requestapp = FastAPI()SECRET_KEY = "sdifhgsiasfjaofhslio" # JWY簽名所使用的密鑰,是私密的,只在服務(wù)端保存ALGORITHM = "HS256" # 加密算法,我這里使用的是HS256@app.get("/")async def root(): return {"message": "Hello World"}@app.post("/create_token")def create_token(username,password): if username == "123" and password == "123": access_token_expires = timedelta(minutes=60) expire = datetime.utcnow() + access_token_expires payload = { "sub": username, "exp": expire } # 生成Token,返回給前端 access_token = jwt.encode(payload, SECRET_KEY, algorithm=ALGORITHM) return {"access_token": access_token, "token_type": "bearer"} else: raise HTTPException( status_code=HTTP_401_UNAUTHORIZED, detail="username or password are not true", headers={"WWW-Authenticate": "Bearer"} )def authorized_user(token): try: payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) username: str = payload.get("sub") print(username) if username == "123": return username except jwt.PyJWTError: raise HTTPException( status_code=HTTP_401_UNAUTHORIZED, detail="認(rèn)證失敗,無權(quán)查看", headers={"WWW-Authenticate": "Bearer"},)@app.get("/app")def create_token(request: Request): print(request.headers.get("host"), request.headers.get("Authorization")) user = authorized_user(request.headers.get("Authorization")) # 驗證Token if user: return {"username": user,"detail": "JWT通過,查詢成功"}

這里,由于現(xiàn)有的JWT庫已經(jīng)幫我們封裝好了,我們可以使用JWT直接生成 token,不用手動base64加密和拼接。

測試一下:

啟動項目之后,我們打開http://127.0.0.1:8000/docs# ,就會看到以下我們編寫好的api:

首先,我們先驗證一下create_token接口

當(dāng)我們輸入用戶名,密碼后,后端進(jìn)行驗證,驗證成功后會返回給前端一個token,也就是JWT。當(dāng)前端拿到這個token之后,下次在請求的時候就必須要帶上這個token了,因為前后端已經(jīng)約定好了。接下來我們試一下:

認(rèn)證失敗???

什么原因?qū)е碌哪?#xff1f;?讓我們點開檢查抓一下包看看:

恍然大悟,剛才我們說過,前后端事先約定好的,請求的header中一定要帶上token,在Authorization ,內(nèi)容token。我們現(xiàn)在這個請求的header中并沒有帶上token,那這種debug模式下又是改不了請求header信息的,我們可以使用接口測試工具進(jìn)行測試,我主推Postman!!!,讓我們來試一下:

至此,JWT介紹以及使用梳理完畢。

最后,感謝女朋友在生活中,工作上的包容、理解與支持 !

總結(jié)

以上是生活随笔為你收集整理的jwt如何防止token被窃取_在吗?认识一下JWT(JSON Web Token)?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一区二区福利视频 | 日日碰日日操 | 99精品一区二区三区无码吞精 | 天天爽天天爽天天爽 | 国产免费黄色小视频 | 国产a级免费视频 | 国产淫片av片久久久久久 | 欧美精品一二区 | 黄毛片在线观看 | 丁香六月五月婷婷 | 超碰人人人人人 | 奇米成人影视 | 一本到高清 | 欧美怡春院 | 99久久精品免费看国产四区 | 亚洲高清在线观看 | 美女黄色一级 | av高清一区 | 亚洲奶水xxxx哺乳期 | 中文字幕一区二区久久人妻网站 | 999www| www.黄色一片 | 超碰精品在线观看 | 国产在线观看第一页 | 亚洲精品1区2区3区 国产丝袜网站 | 91污在线观看 | 国内自拍真实伦在线观看 | 打开免费观看视频在线播放 | 久草av在线播放 | 国产经典三级在线 | 亚洲精品一区二区三区蜜臀 | 青青青青青青青青草 | 国产另类在线 | 男人天堂aaa | 国产尻逼视频 | 亚洲爆乳无码一区二区三区 | 最全aⅴ番号库网 | 日本三级视频在线播放 | 日本午夜精品理论片a级app发布 | 九九国产精品视频 | 一本久道久久综合 | 黄色一级片在线免费观看 | 美女性生活视频 | 曰本丰满熟妇xxxx性 | 国产精品免费一区二区三区在线观看 | 欧美亚洲综合在线 | 狠狠操综合网 | 国产成人在线电影 | 捆绑无遮挡打光屁股 | 初尝情欲h名器av | 亚洲天堂av女优 | 国产成人精品在线 | 黄色在线免费看 | 在线视频观看你懂得 | 亚洲网站av | 天堂色播| aaa久久| 欧美黄色片免费看 | 粉嫩精品久久99综合一区 | 无码精品黑人一区二区三区 | xxxxhd欧美| 麻豆tube| 97福利影院| 中文字幕第二页 | 国产又大又粗又爽的毛片 | 99热超碰| 欧美成人午夜剧场 | 欧洲-级毛片内射 | 韩国女主播一区二区 | 99青青草| 啪啪天堂| 婷婷成人综合 | 免费网站www在线观看 | 欧洲免费av | 亚洲看片网 | 囯产精品久久久久久 | av一区二 | 中文在线观看免费高清 | 亚洲精品三区 | 国产三级av在线播放 | av午夜在线 | 亚洲码国产精品高潮在线 | 99成人在线| 精品免费| 日韩电影二区 | 一区二区日本视频 | 在线看视频 | www欧美精品 | 亚洲精品视频三区 | 亚洲精品男女 | 私人av| 国产精品久久久久久久久动漫 | 大黄一级片 | 国产一区二区视频在线观看免费 | 女人的av| 波多野结衣亚洲一区 | 亚洲综合在线观看视频 | 熟妇人妻一区二区三区四区 | 综合色导航 |