[英]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.