栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

golang和java之间jwt token解析遇到的坑

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang和java之间jwt token解析遇到的坑

假如sso单点登录平台是java写的,我的engineercms是golang写的,单点登录sso平台后返回java生成的token,我的ecms来解析这个token。一直出错,总结和解决如下:

坑1:secret长度和 要求,随便写一个不行,比如“hello”这样不行,短了不行,比如“abcdefghijklmnopqrstuvwxyz”这个不行。这个是可行的:“whatthefuck123weishenmebuneng123”

坑2:java生成的token,在golang上解析需要encode……如下,直接用byte(secret)不行。

坑3:用URLENcoding不行,要用RawStdEncoding。

// 校验token是否有效 返回参数
func LubanCheckToken(tokenString string) (userId, userName string, err error) {
	//坑1:密钥必须要长,要达到这个位数,26个英文字母是不行的。!!!!
	mySignKey := "whatthefuck123weishenmebuneng123" //密钥,同java代码,
	// mySignKeyBytes, err := base64.URLEncoding.DecodeString(mySignKey) //需要用和加密时同样的方式转化成对应的字节数组
	mySignKeyBytes, err := base64.RawStdEncoding.DecodeString(mySignKey) //要用Raw这个
	if err != nil {
		fmt.Println("base64 decodeString failed.", err)
		return "", "", err
	}

	// 原文链接:https://blog.csdn.net/qiang527052/article/details/80748700

	tokenString = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4OCIsInN1YiI6IuWwj-eZvSIsImlhdCI6MTYzMzAxNjU0OSwiY29tcGFueUlkIjoiOTk5OTk5OSIsImNvbXBhbnlOYW1lIjoi6bKB54-tIn0.W9p52lAzo9EcNSb_Uwf7MK9Lw-vNvG_8HHI-piMkNpY"//测试token
	token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
		// Don't forget to validate the alg is what you expect:
		if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
			return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
		}
		// hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
		// return []byte(mySignKey), nil //坑3 这个不行,要用下面decode后的
		return mySignKeyBytes, nil
	})
	if err != nil {
		beego.Error(err)
		return "", "", err
	}
	// token.Valid里已经包含了过期判断
	if token != nil { //&& token.Valid
		beego.Info("You look nice today")
		claims, _ := token.Claims.(jwt.MapClaims)
		// userId = claims["login_user_key"].(string)
		// userName = claims["userName"].(string)
		userName = claims["companyId"].(string)
	}
	return userId, userName, err
}

建议:

在jwt.io网站在线检测——总是出现invalid signature问题

将java生成的token拷贝的网站左侧输入框内,右侧下方填写secret和勾选base64 encoded。如下图:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288642.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号