国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JWT原理和簡單應用

tuantuan / 3244人閱讀

摘要:的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也可以增加一些額外的其它業務邏輯所必須的聲明信息,該也可直接被用于認證,也可被加密。

JWT認證登錄

最近在做一個審核系統,后臺登錄用到JWT登錄認證,在此主要做個總結

JWT是什么

Json web token (JWT), 根據官網的定義,是為了在網絡應用環境間傳遞聲明而執行的一種基于JSON的開放標準.該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄場景。JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也可以增加一些額外的其它業務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密。

為什么使用JWT

此處主要和傳統的session作對比,傳統的session在服務器端需要保存一些登錄信息,通常是在內存中,在后端服務器是集群等分布式的情況下,其他主機沒有保存這些信息,所以都需要通過一個固定的主機進行驗證,如果用戶量大,在認證這個點上容易形成瓶頸,是應用不易拓展。

JWT原理

JWT由三個部分組成,用點號分割,看起來像是這樣,JWT token本身沒有空格換行等,下面是為了美觀處理了下

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19.
m0HD1SUd30TWKuDQImwjIl9a-oWJreG7tKVzuGVh7e4
1.頭部(Header)

Header部分是一個json,描述JWT的元數據,通常是下面這樣

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

alg表示簽名使用的的算法,默認是HMAC SHA256,寫成HS256, tye表示這個token的類型,JWT token統一使用JWT,上面這段Header生成的token是

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
2.負載(Payload)

官方規定了7個字段,解釋如下

iss: 簽發人,可以填寫生成這個token的ID等等,可選參數

sub: 該JWT所面向的客戶,可以存儲用戶的account_id等等,可選

aud:該JWTtoken的接收方,可以填寫生成這個token的接口URL,但是不強制,可選

exp: 過期時間,時間戳,整數,可選參數

iat:生成token的時間,unix時間,時間戳,可選參數

nbf(Not Before): 表示該token在此時間前不可用,驗證不通過的意思,可選

jti: JWT ID,主要用來生成一次性token,可選的參數

除了官方之外,我們還可以定義一部分自定義字段,但是考慮到BASE64是可逆的,所以不要放入敏感信息
下面是一個例子;

{
  "iss": "labs_purifier-api-panel",
  "iat": 1552975878,
  "exp": 1555567878,
  "aud": "http://ff-labs_purifier-api-test.fenda.io/prod/v1/auth/jwt",
  "sub": "1501385611884704",
  "scopes": [
    "register",
    "open",
    "login",
    "panel"
  ]
}

上面這個Payload,經過BASE64加密后,生成的token是

eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19
3.簽名(Signature)

Signature是對前面兩部分生成的兩段token的加密,使用的加密方式是Header里面指定的,此處是HS256,此時,需要一個秘鑰,不可以泄露,大致過程如下:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
JWT的使用

JWT token 一般放在請求頭里面,當然也可以放在cookie里面,但是放在cookie里面不可以跨域,例如:

Authorization: Bearer 
JWT在Python中的簡單生成和驗證

jwt庫

生成token

def create_token():
    payload={
              "iss": "labs_purifier-api-panel",
              "iat": 1552975878,
              "exp": 1555567878,
              "aud": Config.AUDIENCE,
              "sub": "1501385611884704",
              "scopes": [
                "register",
                "open",
                "login",
                "panel"
              ]
            }
    token = jwt.encode(payload, Config.SECRET_KEY, algorithm="HS256")
    return True, {"access_token": token}

驗證token

def verify_jwt_token(token):
    try:
        payload = jwt.decode(token, Config.SECRET_KEY,
                             audience=Config.AUDIENCE,
                             algorithms=["HS256"])
    except (ExpiredSignatureError, DecodeError):
        return False, token
    if payload:
        return True, jwt_model

需要注意的是,如果在生成的時候,加上了aud參數,驗證的時候也要用上audience參數,并且值必須一樣

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43462.html

相關文章

  • 關于 jwt 你應該知道的事情

    摘要:頭部需要一個頭部,用于描述關于該的最基本的信息,例如其類型以及簽名所用的算法等。簽發者需要準備一個可以確認自己身份的字符串,這個字符串我們稱之為。 什么是 jwt ? JWT 全稱叫 JSON Web Token, 是一個非常輕巧的規范。這個規范允許我們使用 JWT 在用戶和服務器之間傳遞安全可靠的信息。 jwt 使用場景 jwt 用圖廣泛,例如授權、鑒權等。具體一點的話,假如我們有一...

    leone 評論0 收藏0
  • 帶你弄懂JWT原理

    摘要:的組成一個實際上就是一個字符串,它由三部分組成,頭部載荷與簽名。這個字符串我們將它稱作的載荷。注意是一種編碼,它是可以被翻譯回原來的樣子來的。這也可以被表示成一個對象。 JSON Web Token(JWT)是一個非常輕巧的規范。這個規范允許我們使用JWT在用戶和服務器之間傳遞安全可靠的信息。 讓我們來假想一下一個場景。在A用戶關注了B用戶的時候,系統發郵件給B用戶,并且附有一個鏈接點...

    animabear 評論0 收藏0
  • 手動實現一個jsonwebtoken

    摘要:利用消息認證碼可以確保消息不是被別人偽造的,消息認證碼是帶密鑰的函數,由于有了一個,所以會比有更好的安全性。所以需要采用的就是算法,該算法主要利用的是不對稱加密算法,利用私鑰進行簽名,公鑰驗證數據的完整性。 寫在前面 本文會到你了解jwt的實現原理,以及base64編碼的原理。同時本人也簡單的實現了一下jwt的生成,點這里。 jwt是什么 本質上它是一段簽名的 JSON 格式的數據。由...

    zhangke3016 評論0 收藏0
  • 理解JWT(JSON Web Token)認證及python實踐

    摘要:認證服務器,即服務提供商專門用來處理認證的服務器。它與認證服務器,可以是同一臺服務器,也可以是不同的服務器。客戶端使用上一步獲得的授權,向認證服務器申請令牌。認證服務器對客戶端進行認證以后,確認無誤,同意發放令牌。 最近想做個小程序,需要用到授權認證流程。以前項目都是用的 OAuth2 認證,但是Sanic 使用OAuth2 不太方便,就想試一下 JWT 的認證方式。這一篇主要內容是 ...

    BigTomato 評論0 收藏0
  • Spring Security

    摘要:框架具有輕便,開源的優點,所以本譯見構建用戶管理微服務五使用令牌和來實現身份驗證往期譯見系列文章在賬號分享中持續連載,敬請查看在往期譯見系列的文章中,我們已經建立了業務邏輯數據訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...

    keelii 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<