AADB2C90006 在redirect_uri 中使用 https-> http 转换

问题描述 投票:0回答:3

我有一个 ASP.NET Core 应用程序,它使用 Azure Active Directory B2C 进行身份验证,并将其部署到 Google App Engine 实例中。在 AD B2C 中的应用程序配置中,我将

https://<domain>/signin-oid
作为重定向 URL,但是当我登录时,出现错误
AADB2C90006
,指出域
http://<domain>/signin-oid
无效。我的代码中没有指定此网址的
http
版本。

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

      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
                });
asp.net-core google-apps azure-ad-b2c
3个回答
3
投票

好吧,我仍然不知道为什么会出现

http:
而不是
https:
,但我 do 有一个解决办法。

在我的项目中,我有一个名为

OpenIdConnectOptionsSetup
的类,它是我从 Azure AD B2C 示例 中选取的。在本课程中,我配置了
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 成功登录到我的站点。


2
投票

在 Linux 上将 .NET Core 应用程序部署到 Azure 应用服务时,我遇到了同样的问题。我能够通过转发

XForwardedProto
中的
Startup.cs
标头来解决这个问题,如这个答案中指定的那样。


0
投票

如果您使用的是 Azure 应用服务(Linux 容器),只需设置以下环境变量:“ASPNETCORE_FORWARDEDHEADERS_ENABLED”=true

https://github.com/AzureAD/microsoft-identity-web/wiki/Deploying-Web-apps-to-App-services-as-Linux-containers

© www.soinside.com 2019 - 2024. All rights reserved.