解析 JWT:验证 ID 令牌时出错:输入字节 0 处存在非法 base64 数据

cbl*_*bll 0 javascript authentication go jwt

我正在 GET 请求的请求标头中将 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()
                    }
                });
Run Code Online (Sandbox Code Playgroud)

在端点托管的 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
    }
}
Run Code Online (Sandbox Code Playgroud)

令牌函数如下:

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
}
Run Code Online (Sandbox Code Playgroud)

打印出令牌时,对我来说似乎很好。但是,我从请求标头中检索它的方法是否错误?看起来可能是这样吗?

Seb*_*iak 6

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

strings.Split(reqToken, "Bearer ")
Run Code Online (Sandbox Code Playgroud)