javascript - 去解析JWT : error verifying ID token: illegal base64 data at input byte 0

标签 javascript authentication go jwt

我在 GET 请求的请求 header 中将 Firebase JWT 添加到我的 Google App Engine Go 服务。这是 JavaScript:

const response = await fetch(
                'https://some-app.appspot.com/_ah/data', {
                    method: 'get',
                    headers: {
                        'Authorization': 'Bearer ' + await Component.fetchJWT()
                    }
                });

在端点托管的 my Go 服务上,收到了请求。但是,抛出错误:

验证 ID token 时出错:输入字节 0 处的 base64 数据非法

这是我处理 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
    }
}

token 函数是这样的:

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: %v\n", err)
    }

    token, err := client.VerifyIDToken(idToken)
    if err != nil {
        log.Fatalf("error verifying ID token: %v\n", err) // Error thrown here
    }

    log.Printf("Verified ID token: %v\n", token)
    // [END verify_id_token]

    return token
}

打印出 token 时,我觉得没问题。但是,我从请求 header 中检索它的方法是错误的吗?看起来是这样?

最佳答案

删除授权 header 拆分中的前导空格

strings.Split(reqToken, "Bearer ")

关于javascript - 去解析JWT : error verifying ID token: illegal base64 data at input byte 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48169033/

相关文章:

mysql - mysql workbench 6.2.4 中的登录问题

json - Go-Gorm 中的深层嵌套结构

Javascript 按钮单击 + 显示

javascript - 如何一次选择多个复选框?

javascript - Meteor.js/Handlebars.js - 了解程序编码风格和范围

java - servlet 过滤器是否知道 REST 请求的目的地?

security - 简单的认证方案

go - 换行符上的右括号不编译

go - 如何在没有嵌套循环的情况下将嵌套结构塑造成另一个结构?

javascript - 一段时间后动画开始移出位置