用户通过在前端进行身份验证
const googleAuthProvider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(googleAuthProvider);
之后,我调用了一个带有可调用firebase的云函数:
const nodeStateCall = functions.httpsCallable('myFunction');
nodeStateCall().then(...);
这工作起来没有任何问题,我在go函数中收到了jwt令牌。
我尝试了许多不同的变体来验证此令牌。我现在使用的函数是google.golang.org/api/idtoken
包中的idtoken.Validate()
。
我的功能:
func verifyIdToken(idToken string)(tokenInfo *idtoken.Payload, err error) {
log.Print("running verify Token")
splitToken := strings.Split(idToken, "Bearer ")[1]
log.Print("split Token:"+splitToken)
tokenInfo, err = idtoken.Validate(context.Background(),splitToken,"MYAUDIENCE")
if err != nil {
log.Print("error from tokenInfoCall.Do()")
log.Print(err)
return nil, err
}
log.Print("Finished verify token.")
return tokenInfo, nil
}
但我不断地得到";无效值";当我发送令牌时。
我还尝试了oauth2服务:
oauth2Service, err := oauth2.NewService(context.Background())
tokenInfoCall := oauth2Service.Tokeninfo()
tokenInfoCall.IdToken(splitToken)
tokenInfo, err := tokenInfoCall.Do()
也没用。
我需要做些什么来验证go函数中的firebasejwt令牌?
因为您正在使用firebase服务,所以需要使用它来验证您的令牌:
https://firebase.google.com/docs/auth/admin/verify-id-tokens#verify_id_tokens_using_the_firebase_admin_sdk
请注意,您应该在同一个项目中设置函数,以便库能够正确查询。