.Net Core 2.1 OpenIdConnectProtocolException - PullRequest
0 голосов
/ 12 марта 2019

У меня есть приложение .Net Core 2.1, которое я использую для тестирования моего нового развертывания Identity Server 4 в AWS.

Две программы отлично работают на моем локальном компьютере, где я могу проходить аутентификацию с IS4 и перенаправляться в свое приложение со всей информацией для входа в систему.

На моем развернутом сервере это не так, и я не уверен, почему.

Я не вижу ошибок на моем сервере IS4, он видит мой клиент и аутентифицирует запрос.

Однако на моей локальной машине мой проект получает ошибку:

System.Exception: An error was encountered while handling the remote login. ---> Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException: Message contains error: 'invalid_request', error_description: 'error_description is null', error_uri: 'error_uri is null'.
   at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.RedeemAuthorizationCodeAsync(OpenIdConnectMessage tokenEndpointRequest)
   at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync()
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

После того как я позвоню:

return Challenge(new AuthenticationProperties
                {
                    RedirectUri = "Home/Index"
                }, "challenge");

Запуск локальных программ:

services.AddAuthentication(options =>
                {
                    options.DefaultScheme = "Cookie";
                    options.DefaultChallengeScheme = "challenge";
                    //options.DefaultSignInScheme = IdentityServerConstants.DefaultCookieAuthenticationScheme;
                    //options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                })
                .AddCookie("Cookie")
                .AddOpenIdConnect("challenge", options =>
                {
                    options.Authority = "http://auth.is4server.com";
                    //options.Authority = "http://localhost:5000";
                    options.SignInScheme = "Cookie";
                    options.RequireHttpsMetadata = false;
                    options.ClientId = "mvc";
                    options.ClientSecret = "secret";
                    options.ResponseType = "code id_token";
                    options.SaveTokens = true;
                    options.GetClaimsFromUserInfoEndpoint = true;
                    options.Scope.Add("offline_access");
                    options.Scope.Add("profile");
                    options.Scope.Add("accunet");

                });

Похоже, что он перенаправляет на страницу входа в IS4, а затем мгновенно пытается перенаправить обратно на мой redirectUri, который localhost:5002/signin-oidc с предыдущей ошибкой. Я подтвердил, что вся моя конфигурация IS4 одинакова на моей локальной машине и экземпляре AWS.

Я не уверен, почему это не работает, есть ли проблемы с попыткой перенаправить на мою локальную машину? Ошибка, кажется, не дает мне много деталей и сетевых ответов.

До того, как это начало происходить, я бы хотя бы попытался войти на страницу входа в IS4, прежде чем перенаправить меня обратно к моему signin-oidc. Теперь он даже не попадает на страницу входа, он всегда перенаправляет на signin-oidc с ошибкой. Я очистил куки и перезапустил сервер и локальный проект безрезультатно.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 июля 2019

Эта проблема была связана с моим балансировщиком нагрузки в AWS.Поскольку сервер IS4 стоял за этим балансировщиком нагрузки, весь внутренний трафик между 2 контейнерами удаленных шлюзов AWS связывается HTTP.В связи с этим вам необходимо иметь свой авторитет как HTTP.

Однако у меня также есть политика в моем кластере AWS для перенаправления всего трафика на HTTPS, из-за этого конфликта всякий раз, когда я вызываю options.Authority = "http://auth.is4server.com";, он пытается перенаправить на "https://auth.is4server.com";, поскольку он является внутренним FarGate это не позволяет.

Решение добавляло options.Origin = "https://auth.is4server.com";, поэтому документ обнаружения имел защищенную конечную точку и не пытался перенаправить.

...