空白授权标头

问题描述 投票:0回答:1

我有一个用 Golang 编写的 API 和一个用 C# 编写的客户端,它们使用

Bearer
令牌,在客户端上我添加
Authorization
标头,但在服务器端它是空白的。

这是客户端 C#:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myUrl);
 //request.PreAuthenticate = true;
 request.ContentType = "application/json";
 request.Method = "PUT";
 request.Headers.Add("Authorization", $"Bearer {token}");
 //request.Accept = "application/json";

 using (StreamWriter stream = new StreamWriter(request.GetRequestStream()))
 {
     string serialized = JsonConvert.SerializeObject(sync, new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" });
     stream.Write(serialized);
 }

 try
 {
     using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
     {
         if (((int)response.StatusCode) < 200 || ((int)response.StatusCode) >= 300)
         {
             throw new Exception("error");
         }
     }
 }
 catch (WebException wex)
 {
     var body = new StreamReader(wex.Response.GetResponseStream()).ReadToEnd();
     throw new HttpRequestException(body);
 }

调试一下,token是存在的。

这是golang服务器代码:


return func(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        ctx := r.Context()
        authHeader := r.Header.Get("Authorization")

        _, err := parseAuthHeader(ctx, verifier, authHeader)
        if err != nil {
            render.Render(w, r, httperr.ErrUnauthorized(err.Error()))
            return
        }
        next.ServeHTTP(w, r)
    })
}

变量

authHeader
为空,但仅在生产环境中(Google Cloud)。如果我在本地运行它,它就可以工作。已经尝试添加
PreAuthenticate
,但没有帮助。有什么想法吗?

c# authentication go header
1个回答
0
投票

好吧,我使用

http
代替
https
api 链接。添加
s
解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.