Ошибка корреляции при перемещении с .NET Core 2.2 на NET 5

#asp.net-core #asp.net-core-mvc #identityserver3 #.net-5 #asp.net5

#asp.net-core #asp.net-core-mvc #identityserver3 #.net-5 #asp.net5

Вопрос:

Я использую IdentityServer3 для аутентификации OpenIdConnect. У меня есть ASP.NET Клиентское приложение Core 2.2, которое использует следующий код в startup.cs для аутентификации, и оно работает нормально.

 public void ConfigureServices(IServiceCollection services)
{
        services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
        {
            options.LoginPath = "/Home";
            options.AccessDeniedPath = "/Account/AccessDenied";
            options.Cookie = new CookieBuilder()
            {
                Name = "MyAuthCookie",
                HttpOnly = true, 
            };
            options.SlidingExpiration = true;
        })
        .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
        {
            options.Authority = configuration["Identity:Authority"];
            options.ClientId = configuration["Identity:ClientId"];
            options.ResponseType = "id_token";
            options.CallbackPath = "/Home";
            options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.SignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.Scope.Add(OpenIdConnectScope.Email);
            options.Events = new OpenIdConnectEvents()
            {
                OnTokenValidated = async context =>
                {
                    // removed for brevity purpose                        
                },
                OnRedirectToIdentityProvider = async context =>
                {
                    if (context.ProtocolMessage.RequestType == OpenIdConnectRequestType.Authentication)
                    {
                        context.ProtocolMessage.AcrValues = "tenant:"   context.Request.Host.Value;
                    }
                    await Task.FromResult(0);
                },
                OnRedirectToIdentityProviderForSignOut = async context =>
                {
                    context.ProtocolMessage.IdTokenHint = context.HttpContext.User.FindFirst("id_token").Value;
                    await Task.FromResult(0);
                }
            };
        });
}
 

У меня есть новое приложение .NET 5 , которое использует тот же код, что и выше.
Однако в NET 5 приложении я получаю исключение после успешного входа пользователя в систему на сервере IndentityServer и когда сервер идентификации перенаправляет обратно в клиентское приложение.

введите описание изображения здесь

Что изменилось в .NET 5 ?

Другое отличие заключается Home в настройке маршрута. Не уверен, что это будет иметь какое-либо значение здесь

в .NET core 2.2

 app.UseMvc(routes =>
            {
                routes.MapRoute(
                  name: "areas",
                  template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
                );

                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
}
 

в .NET 5

   app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
             name: "areas",
             pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
           );

            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
      }
 

Ответ №1:

Нашел его. Я тестировал это локально в VS 2019. Я включил SSL, и это сработало.