如何提取和验证从前端发送的令牌 [英] How to extract and verify token sent from frontend
问题描述
我正在使用"github.com/dgrijalva/jwt-go",并且能够向我的前端发送令牌,以及我想知道如何才能检索从前端发送的令牌,以便验证发送的令牌是否有效,如果有效,将交付安全资源.
I am using "github.com/dgrijalva/jwt-go", and able to send a token to my frontend, and what I would like to know how I could retrieve the token sent from the frontend so that I can verify if the token that was sent is valid and if so the secured resource will be delivered.
这是前端JavaScript发送的令牌:
Here is the token sent from frontend JavaScript:
headers: {
'Authorization':'Bearer' + localStorage.getItem('id_token')
}
这是发送令牌的代码
token := jwt.New(jwt.GetSigningMethod("HS256"))
claims := make(jwt.MapClaims)
claims["userName"] = loginRequest.UserName
claims["exp"] = time.Now().Add(time.Minute * 60).Unix()
token.Claims = claims
tokenString, err := token.SignedString([]byte(SecretKey))
tokenByte, err := json.Marshal(data)
w.WriteHeader(201)
w.Write(tokenByte)
这是验证令牌的代码
func VerifyToken(r *http.Request) bool {
reqToken := r.Header.Get("Authorization")
token, err := jwt.Parse(reqToken, func(t *jwt.Token) (interface{}, error) {
return []byte(SecretKey), nil
})
if err == nil && token.Valid {
fmt.Println("valid token")
return true
} else {
fmt.Println("invalid token")
return false
}
}
正在获取 nil 令牌作为回报,我猜是我已经发送了不记名令牌,我认为如果需要的话可能需要解析?
Am getting nil token as a return, my guess is I have sent bearer and I think it might need parsing if so how?
推荐答案
在我的情况下,服务器需要令牌字符串而不添加字符串,在向Web服务器发送请求时,我已经在标题的令牌字符串中添加了Bearer字符串,即
The server requires a token string without added strings in my case I have added Bearer string to the token string in the header when sending request to the web server i.e.
'Authorization':'Bearer ' + localStorage.getItem('id_token')
在Web服务器上,我们只需要拆分有效令牌,而无需Bearer字符串
At the web server we need to split only the valid token without the Bearer string
reqToken := r.Header.Get("Authorization")
splitToken := strings.Split(reqToken, "Bearer ")
reqToken = splitToken[1]
因此,它成为没有nil的有效令牌.
As a result it becomes valid token without nil.
这篇关于如何提取和验证从前端发送的令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!