AppHarbor的反向代理导致SSL和app.UseOAuthBearerTokens ASP.NET MVC 5出现问题

 0o墨滴成殇 发布于 2023-01-09 12:41

AppHarbor的应用程序位于NGINX负载均衡器后面.因此,所有访问客户端应用程序的请求都将通过HTTP传递,因为SSL将由此前端处理.

ASP.NET MVC的OAuth 2 OAuthAuthorizationServerOptions具有将令牌请求的访问限制为仅使用HTTPS的选项.问题是,与Controller或ApiController不同,当我指定AllowInsecureHttp = false时,我不知道如何允许这些转发请求.

具体来说,在app startup/config中:

  app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions {
            AllowInsecureHttp = true,
   });

需要以某种方式在内部进行此检查,如果是真的,请将其视为SSL:

HttpContext.Request.Headers["X-Forwarded-Proto"] == "https"

以下是我通过应用自定义过滤器属性使用MVC Controller的方法:https: //gist.github.com/runesoerensen/915869

1 个回答
  • 您可以尝试注册一些可以根据nginx转发的标头修改请求的中间件.您可能还希望将远程IP地址设置为X-Forwarded-For标头的值.

    这样的东西应该工作(未经测试):

    public class AppHarborMiddleware : OwinMiddleware
    {
        public AppHarborMiddleware(OwinMiddleware next)
            : base(next)
        {
        }
    
        public override Task Invoke(IOwinContext context)
        {
            if (string.Equals(context.Request.Headers["X-Forwarded-Proto"], "https", StringComparison.InvariantCultureIgnoreCase))
            {
                context.Request.Scheme = "https";
            }
    
            var forwardedForHeader = context.Request.Headers["X-Forwarded-For"];
            if (!string.IsNullOrEmpty(forwardedForHeader))
            {
                context.Request.RemoteIpAddress = forwardedForHeader;
            }
            return Next.Invoke(context);
        }
    }
    

    确保在配置身份验证中间件之前添加它:

    app.Use<AppHarborMiddleware>();
    app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions
    {
        AllowInsecureHttp = false,
    });
    

    2023-01-09 12:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有