gpt4 book ai didi

azure - 当托管在 Linux 容器中时,ASP.NET Core 在 OAuth 质询中传递 HTTP(而非 HTTPS)重定向 URL

转载 作者:行者123 更新时间:2023-12-02 06:05:51 26 4
gpt4 key购买 nike

我有 Identity Server 4 的实现,它提供了使用 Google 登录的选项。该应用已在 Google 的开发者控制台中注册,并且在 Windows 虚拟机上托管时已经运行了一段时间。

我最近将此应用程序容器化,并将其部署到作为 Azure 应用服务托管的 Linux 容器中。我没有更改任何应用程序代码。 Azure 应用服务配置为仅提供 HTTPS,并且我已验证客户端浏览器和 Cloudflare(我的 DNS 提供商)之间以及 Cloudflare 和源之间的流量均受到 SSL 证书的严格保护。

这是 Google OAuth 按钮的外观。您可以看到这是一个有效的 SSL 连接:

enter image description here

以下是注册此 OAuth 提供程序的代码:

        services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

options.ClientId = _externalAuthConfig.Google.ClientId;
options.ClientSecret = _externalAuthConfig.Google.ClientSecret;
});

我已确认客户端和 key 有效。这是单击按钮时执行的代码。你看这都是标准的东西。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[Route("challenge")]
public IActionResult ExternalLogin(
[FromForm] string provider,
[FromQuery] string returnUrl = null)
{
// Request a redirect to the external login provider.
var redirectUrl = Url.Action(nameof(ExternalLoginCallback), new { returnUrl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return Challenge(properties, provider);
}

但是,在这个容器化的世界中,当浏览器重定向到 Google 时,我看到的是:

enter image description here

注意 http://在重定向 URL 中。显然,发生错误是因为我只注册了 HTTPS 重定向 URL。在 Windows VM 上运行的相同代码可以正确传递查询字符串中的 HTTPS 重定向 URL。我不知道为什么在这个容器化环境中使用这个不安全的 URL。据我所知,唯一的区别是托管基础设施。

如果重要的话,这个新站点使用内置的 Kestrel Web 服务器,而旧的 Windows 版本在前面使用 IIS。

有人有什么想法吗?我被难住了!

最佳答案

典型的,我在@FerronSW关于this SO question的答案中找到了解决方案发布我的问题 30 分钟后。

解决方案是将以下代码添加到您的Startup中:

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

经过测试并有效。

关于azure - 当托管在 Linux 容器中时,ASP.NET Core 在 OAuth 质询中传递 HTTP(而非 HTTPS)重定向 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57425951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com