AADB2C90006 с переходом https-> http в redirect_uri - PullRequest
0 голосов
/ 23 января 2019

У меня есть приложение ASP.NET Core, которое использует Azure Active Directory B2C для проверки подлинности, которое я развертываю в экземпляре Google App Engine. В конфигурации моего приложения в AD B2C в качестве URL-адреса перенаправления используется https://<domain>/signin-oid, но при входе в систему появляется ошибка AADB2C90006 о том, что домен http://<domain>/signin-oid недействителен. Я не указал http версию этого URL в моем коде.

Я попытался запустить это локально в моей среде разработки, и оно работает как положено. Я понимаю, что Nginx действует как прокси перед запущенным экземпляром Kestrel, и я настроил SSL в своем экземпляре Kestrel для использования того же сертификата, что и экземпляр 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
                });

1 Ответ

0 голосов
/ 27 января 2019

Ну, я до сих пор не знаю, почему вместо https: приходит http:, но у меня действительно есть исправление.

В моем проекте у меня есть класс под названием 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.

...