Golang 和 JWT - 简单注销
Golang and JWT - Simple Logout
我目前正在研究 API,经过一段时间后,我现在了解如何在 Go 中使用 JWT 来获取令牌。使用此令牌,我可以使用户保持连接状态,但是如何从客户端应用程序注销?
这是我的 token.go
代码:
package main
import (
"github.com/dgrijalva/jwt-go"
"time"
)
const (
tokenEncodeString = "something"
)
func createToken(user User) (string, error) {
// create the token
token := jwt.New(jwt.SigningMethodHS256)
// set some claims
token.Claims["username"] = user.Username;
token.Claims["password"] = user.Password;
token.Claims["exp"] = time.Now().Add(time.Hour * 72).Unix()
//Sign and get the complete encoded token as string
return (token.SignedString([]byte(tokenEncodeString)))
}
func parseToken(unparsedToken string) (bool, string) {
token, err := jwt.Parse(unparsedToken, func(token *jwt.Token) (interface{}, error) {
return []byte(tokenEncodeString), nil
})
if err == nil && token.Valid {
return true, unparsedToken
} else {
return false, ""
}
}
经过研究,我发现我可以使用黑名单,但我真的很想知道是否可以使用更简单的方法,如上面的代码。
我还想找到一个适用于 JWT 进程所用内存的解决方案。 disconnects/connects 一直都是他自己的人每次会话只需要一个令牌,而不是他一个和给定黑名单中的一百个。
第一:不要(永远)将敏感凭证放入令牌中。它们没有加密,您不需要这样做。
注意事项:
- JWT 是无状态的:您发布一个,只要您在服务器上进行 allowed/are 验证,它就会存在。
- 您可以发布一个新的 JWT,有效期为 'now',但旧的 JWT 仍然有效(即存在安全风险)。
- 通读http://jwt.io/introduction/
如果您需要控制颁发后过期的访问令牌,那么您应该实施服务器端方案,这将允许您直接使令牌过期。用户只会持有一个引用服务器端商店的 ID。
我目前正在研究 API,经过一段时间后,我现在了解如何在 Go 中使用 JWT 来获取令牌。使用此令牌,我可以使用户保持连接状态,但是如何从客户端应用程序注销?
这是我的 token.go
代码:
package main
import (
"github.com/dgrijalva/jwt-go"
"time"
)
const (
tokenEncodeString = "something"
)
func createToken(user User) (string, error) {
// create the token
token := jwt.New(jwt.SigningMethodHS256)
// set some claims
token.Claims["username"] = user.Username;
token.Claims["password"] = user.Password;
token.Claims["exp"] = time.Now().Add(time.Hour * 72).Unix()
//Sign and get the complete encoded token as string
return (token.SignedString([]byte(tokenEncodeString)))
}
func parseToken(unparsedToken string) (bool, string) {
token, err := jwt.Parse(unparsedToken, func(token *jwt.Token) (interface{}, error) {
return []byte(tokenEncodeString), nil
})
if err == nil && token.Valid {
return true, unparsedToken
} else {
return false, ""
}
}
经过研究,我发现我可以使用黑名单,但我真的很想知道是否可以使用更简单的方法,如上面的代码。
我还想找到一个适用于 JWT 进程所用内存的解决方案。 disconnects/connects 一直都是他自己的人每次会话只需要一个令牌,而不是他一个和给定黑名单中的一百个。
第一:不要(永远)将敏感凭证放入令牌中。它们没有加密,您不需要这样做。
注意事项:
- JWT 是无状态的:您发布一个,只要您在服务器上进行 allowed/are 验证,它就会存在。
- 您可以发布一个新的 JWT,有效期为 'now',但旧的 JWT 仍然有效(即存在安全风险)。
- 通读http://jwt.io/introduction/
如果您需要控制颁发后过期的访问令牌,那么您应该实施服务器端方案,这将允许您直接使令牌过期。用户只会持有一个引用服务器端商店的 ID。