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

asp.net-core – 不使用HTTPS的ASP.NET 5 OAuth重定向URI

发布时间:2020-12-16 09:55:24 所属栏目:asp.Net 来源:网络整理
导读:我正在复制 Social Sample,但尝试使用其中未显示的其他OAuth提供程序,所以我有一些代码如下: app.USEOAuthAuthentication("test",options ={ options.ClientId = "xxx"; options.ClientSecret = "xxx"; options.AuthorizationEndpoint = "xxx"; options.Tok
我正在复制 Social Sample,但尝试使用其中未显示的其他OAuth提供程序,所以我有一些代码如下:

app.USEOAuthAuthentication("test",options =>
{
     options.ClientId = "xxx";
     options.ClientSecret = "xxx";
     options.AuthorizationEndpoint = "xxx";
     options.TokenEndpoint = "xxx";
     options.CallbackPath = new PathString("/signin-test");
});

我的应用程序在反向代理后运行,终止SSL.当我需要https://myapp.com/signin-test时,我的redirect_uri会变成http://myapp.com/signin-test.

所有应用程序都知道X-Forwarded-Proto HTTP标头是否设置为“http”或“https”,但似乎没有检测到.

有没有办法强制CallbackPath使用HTTPS,无论请求是否这样做?或者其他一些方法来实现这一目标?

我尝试将所有请求重定向到HTTPS,但这没有帮助:

app.Use(async (context,next) =>
{
    if ("https".Equals(context.Request.Headers["x-forwarded-proto"]))
    {
        await next();
    }
    else
    {
        var withHttps = "https://" + context.Request.Host + context.Request.Path;
        context.Response.Redirect(withHttps);
    }
});

解决方法

建议的方法是在调用管道的其余部分之前手动更改context.Request.Scheme以返回https而不是http(等待next()):

app.Use(next => context => {
    if (string.Equals(context.Request.Headers["X-Forwarded-Proto"],"https",StringComparison.OrdinalIgnoreCase)) {
        context.Request.Scheme = "https";
    }

    return next(context);
});

仅供参考,ASP.NET团队目前正在开发一种可自动执行此任务的中间件:https://github.com/aspnet/BasicMiddleware/pull/1/files

(编辑:李大同)

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

    推荐文章
      热点阅读