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



我正在将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 ")

最新更新