【问题标题】:Stripped header in request from client to server从客户端到服务器的请求中的剥离标头
【发布时间】:2019-10-07 16:11:33
【问题描述】:

最近我将由 angular 7 客户端和 asp .net core web api (.net core v2.2) 组成的简单应用程序转移到生产环境中,遇到了一个奇怪的问题。当我尝试执行一个应该在标头中使用身份验证令牌进行发布请求的操作时,我收到了 401 - 未经授权的服务器错误。

我的生产环境是 Ubuntu 18.04 和 Apache2 服务器,代理设置为从端口 80 重定向到端口 5000(这是 API 所在的地方)。

在开发环境中,一切都运行良好,没有任何错误,所以我猜想将请求标头从 apache 传输到 kestrel。

我试图用谷歌搜索这个问题,在微软的网站上我发现我需要在我的 startup.cs 文件中使用转发头方法,如下所示:

app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); app.UseAuthentication();

我像这样配置了我的启动类,但没有任何成功。 任何试图找到解决方案的帮助或指导将不胜感激。 非常感谢您。

【问题讨论】:

    标签: apache proxy .net-core angular7 kestrel


    【解决方案1】:

    尝试通过中间件添加自定义标头。

    namespace Middleware
    {
    public class CustomHeader
    {
        private readonly RequestDelegate _next;
    
        public CustomHeader(RequestDelegate next)
        {
            _next = next;
        }
    
        public async Task Invoke(HttpContext context,
        {
    
            var dictionary = new Dictionary<string, string[]>()
            {
                {
                    "Access-Control-Allow-Headers",new string[]{ "authorization" }
                }
            };
    
            //To add Headers AFTER everything you need to do this
            context.Response.OnStarting(state => {
                var httpContext = (HttpContext)state;
                foreach (var item in dictionary)
                {
                    httpContext.Response.Headers.Add(item.Key, item.Value);
                }
                return Task.FromResult(0);
            }, context);
    
            await _next(context);
        }
    }
    }
    

    【讨论】:

    • 你能帮我确定这个命名空间的位置吗?似乎我的项目中没有它。
    • 这是一个自定义命名空间。如果您想创建一个中间件来在响应中注入任何东西,那么这是自定义代码。您可以在 microsoft docs 中阅读有关它的更多信息。
    猜你喜欢
    • 2023-03-25
    • 2020-03-11
    • 2010-10-27
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2021-08-04
    相关资源
    最近更新 更多