AADB2C90006在redirect_uri中带有https-> http过渡

时间:2019-01-23 19:03:53

标签: asp.net-core google-apps azure-ad-b2c

我有一个ASP.NET Core应用程序,该应用程序使用Azure Active Directory B2C进行身份验证,并将其部署到Google App Engine实例中。在AD B2C的应用程序配置中,我将Internal/everyone作为重定向URL,但是当我登录时,出现错误https://<domain>/signin-oid,说域AADB2C90006无效。我在代码中的任何地方都没有指定该网址的http://<domain>/signin-oid版本。

我尝试在我的开发环境中本地运行此程序,它可以按预期运行。我了解Nginx在启动的Kestrel实例之前充当代理,并且我已在Kestrel实例中配置SSL以使用App Engine实例使用的同一证书。我之所以这么说是因为我怀疑App Engine和Kestrel配置之间存在某种脱节,尽管对于问题可能出在哪里还是很模糊的。

http

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

Configure

2 个答案:

答案 0 :(得分:0)

好吧,我仍然不知道为什么会http:而不是https:,但是我确实有针对性的解决方法。

在我的项目中,我有一个名为OpenIdConnectOptionsSetup的类,它是从Azure AD B2C sample中学到的。在此类中,我配置OpenIdConnectEvents,其中包括一个OnRedirectToIdentityProvider委托,在这里我有一些代码在寻找http:,但埋在if语句中以寻找身份验证策略中的差异,我尚未看到的代码被调用,但我离题了。

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

            public Task OnRedirectToIdentityProviderAsync(RedirectContext context)
            {
                Logger.LogInformation($"redirect URI for B2C: {context.ProtocolMessage.RedirectUri} !!!!!!!");

                if (context.ProtocolMessage.RedirectUri.Contains("http:"))
                {                    
                    Logger.LogInformation("http: found in RedirectUri, replacing with https");
                    context.ProtocolMessage.RedirectUri = context.ProtocolMessage.RedirectUri.Replace("http:", "https:");
                }

                //in case of error, show us the problem
                if (string.IsNullOrEmpty(context.ProtocolMessage.ErrorUri))
                {
                    Logger.LogInformation("ErrorUri is empty! replacing with ErrorUri property.");
                    context.ProtocolMessage.ErrorUri = GCPSettings.ErrorUri;
                }
            }

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

答案 1 :(得分:0)

在Linux上将.NET Core应用程序部署到Azure应用服务时,我遇到了同样的问题。通过转发this answer中指定的XForwardedProto中的Startup.cs标头,可以解决此问题。