簡體   English   中英

如何在 golang 中驗證和驗證 JWT 令牌有效負載

[英]How to validate & verify JWT token payload in golang

我正在嘗試驗證我的 json 令牌,但我無法做到這一點,

這是我的示例令牌

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

有效載荷:

{
  "admin": false,
  "School_ID": 123,
  "name": "XXXXXX",
  "sub": "XXXXXXXX"
}

簽名:鍵

我的問題是,一旦我試圖操縱 JSON web 令牌並將管理員“”的值更改為“”,它就繞過了我的 ZDB974238714CA8DE634A7CE1D083A1 以防止使用管理員和普通用戶

token, err: = new(jwt.Parser).ParseWithClaims(tokenString, newClaims(), func( * jwt.Token)(interface {}, error) {
    return tokenString, nil
})

但問題仍然存在,任何人都可以幫助我解決這個問題,因為它是關鍵的安全漏洞,我需要修復它。

首先,JTW 阻止用戶更改有效負載,因為用戶沒有密鑰來重新生成 JTW 令牌。 如果在有效負載中將 admin 從 false 更改為 true,是否會重新生成簽名?

For example, you could paste the following text in jtw.io eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c . 您將看到驗證的有效簽名。

But, if you change only payload, you'll get invalid signature, like this, eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRHd3d29lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c . 您也可以將其復制到jtw.io中嘗試。

因此,當您更改有效負載而不重新生成 JWT 令牌時,您將獲得無效的 JWT 令牌。 因此,當您的 JWT 令牌被不知道您的密鑰的用戶修改( admin: false to true )時,用戶基本上無法獲得管理員權限。

最后,JTW 中的signature不是密鑰,它只是批准這個 JWT 令牌由您的密鑰簽名的簽名。

看起來您沒有在任何地方驗證簽名。 您正在解析令牌有效負載,但未驗證簽名。 當您閱讀 JWT 時,您必須驗證簽名以檢查是否有人更改了令牌的內容。 因此,為了防止您在示例中所做的事情。 當您將admin聲明更改為true時,簽名將不再與有效負載匹配,您將能夠拒絕此類令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM