Asp.net core 带https的AADB2C90006->;重定向uri中的http转换

Asp.net core 带https的AADB2C90006->;重定向uri中的http转换,asp.net-core,google-apps,azure-ad-b2c,Asp.net Core,Google Apps,Azure Ad B2c,我有一个ASP.NET核心应用程序,它使用Azure Active Directory B2C进行身份验证,我正在将其部署到Google应用程序引擎实例中。在我的AD B2C应用程序配置中,我有https:///signin-oid作为我的重定向URL,但当我登录时,会出现错误AADB2C90006说域http:///signin-oid无效。我的代码中没有指定此url的http版本 我已经试着在我的开发环境中本地运行这个程序,它的工作原理和预期的一样。我知道Nginx在启动的Kestrel实例

我有一个ASP.NET核心应用程序,它使用Azure Active Directory B2C进行身份验证,我正在将其部署到Google应用程序引擎实例中。在我的AD B2C应用程序配置中,我有
https:///signin-oid
作为我的重定向URL,但当我登录时,会出现错误
AADB2C90006
说域
http:///signin-oid
无效。我的代码中没有指定此url的
http
版本

我已经试着在我的开发环境中本地运行这个程序,它的工作原理和预期的一样。我知道Nginx在启动的Kestrel实例前充当代理,我在Kestrel实例中配置了SSL,以使用appengine实例使用的相同证书。我之所以提到这一点,是因为我的怀疑在于应用程序引擎和红隼配置之间的某种断开,尽管问题可能出在哪里还不清楚

      return new WebHostBuilder()
            .ConfigureKestrel((context, options) =>
            {
                if (!string.IsNullOrEmpty(aspEnv) && !string.Equals(aspEnv,"Development"))
                {                        
                    options.ListenAnyIP(443,opt => opt.UseHttps("myfile.pfx","mypass"));
                }
            })
我的
Configure
功能中也有这一行:

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

嗯,我仍然不知道为什么
http:
而不是
https:
,但我确实有一个解决办法

在我的项目中,我有一个名为
openidconnectoptionsetup
的类,我从。在这个类中,我配置了
OpenIdConnectEvents
,其中包括一个
OnRedirectToIdentityProvider
委托,其中我有一些代码在查找
http:
,但隐藏在一个
if
语句中,查找身份验证策略中的差异,我还没有看到的代码被调用,但我跑题了

我的代表现在看起来像这样:

公共任务OnRedirectToIdentityProviderAsync(重定向上下文)
{
Logger.LogInformation($“B2C重定向URI:{context.ProtocolMessage.RedirectUri}!!!!!!!”;
if(context.ProtocolMessage.RedirectUri.Contains(“http:”))
{                    
Logger.LogInformation(“http:在重定向URI中找到,替换为https”);
context.ProtocolMessage.RedirectUri=context.ProtocolMessage.RedirectUri.Replace(“http:”,“https:”);
}
//如果出现错误,请告诉我们问题所在
if(string.IsNullOrEmpty(context.ProtocolMessage.ErrorUri))
{
Logger.LogInformation(“ErrorUri为空!替换为ErrorUri属性”);
context.ProtocolMessage.ErrorUri=GCPSettings.ErrorUri;
}
}

使用此配置,我成功地使用Azure AD B2C登录到我的站点。

在Linux上将.NET核心应用部署到Azure应用服务时,我遇到了相同的问题。我可以通过转发
Startup.cs
中的
XForwardedProto
标题来解决这个问题。

我假设这是因为web应用程序在重定向到Azure AD B2C之前没有从
http
重定向到
https
,而Azure AD B2C需要
https
回复URL。有帮助吗?我对这个建议有了进一步的了解,它重定向到
https
地址,但给了我一个404,因为B2C的响应仍然在寻找
http
。也尝试添加,但没有运气。