我正在将Firebase JWT添加到GET请求的请求标头中的Google App Engine Go-service中。这是 JavaScript:
const response = await fetch(
'https://some-app.appspot.com/_ah/data', {
method: 'get',
headers: {
'Authorization': 'Bearer ' + await Component.fetchJWT()
}
});
在我的 Go 服务(托管在端点上(上,收到了请求。但是,将引发错误:
error verifying ID token: illegal base64 data at input byte 0
以下是我处理 JWT 的方式:
func (ma *myapp) SomeHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
reqToken := r.Header.Get("Authorization")
splitToken := strings.Split(reqToken, "Bearer")
reqToken = splitToken[1]
fmt.Println(reqToken) // Prints the token correctly
lib.VerifyIDToken(ma.fbapp, reqToken) // Error is thrown in this function
enc := json.NewEncoder(w)
err := enc.Encode(SomeData)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
令牌函数如下:
func VerifyIDToken(app *firebase.App, idToken string) *auth.Token {
// [START verify_id_token]
client, err := app.Auth(context.Background())
if err != nil {
log.Fatalf("error getting Auth client: %vn", err)
}
token, err := client.VerifyIDToken(idToken)
if err != nil {
log.Fatalf("error verifying ID token: %vn", err) // Error thrown here
}
log.Printf("Verified ID token: %vn", token)
// [END verify_id_token]
return token
}
打印令牌时,对我来说似乎很好。但是,我从请求标头中检索它的方法是否错误?看起来是这样?
删除授权标头拆分中的前导空格
strings.Split(reqToken, "Bearer ")