加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – AppHarbor的反向代理导致SSL和app.UseOAuthBeare

发布时间:2020-12-16 06:50:13 所属栏目:asp.Net 来源:网络整理
导读:AppHarbor的应用程序位于NGINX负载均衡器后面.因此,所有访问客户端应用程序的请求都将通过HTTP传递,因为SSL将由此前端处理. ASP.NET MVC的OAuth 2 OAuthAuthorizationServerOptions具有将令牌请求的访问限制为仅使用HTTPS的选项.问题是,与Controller或ApiCon
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

解决方法

您可以尝试注册一些可以根据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,});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读