'Problem with logging in via identity server on MVC application

Hello

I am new to ASP .NET identity & identity server. I have created a MVC application and I would like to connect it through identityserver4 that through identityserver4 you can thus log in to my MVC application....

Now I almost got it working, only when I login via identityserver & I am sent back to my MVC application I get the following error: "Error loading external login information." (See picture of error below)

I don't know directly how to solve this or where to look for it. I've already did a big search online but haven't found any good results...

error

MVC startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<IEmailSender, EmailSender>();
            services.AddControllersWithViews().AddRazorRuntimeCompilation();
            services.AddDbContext<ComputerAppDbContext>();
            services.AddScoped<IRepository, ComputerRepository>();
            services.AddScoped<IManager, Manager>();
            
            /*services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlite(
                    Configuration.GetConnectionString("DefaultConnection")));*/
            
            services.Configure<IdentityOptions>(options =>
            {
                options.Password.RequireDigit = false;
                options.Password.RequireLowercase = true;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase = true;
                options.Password.RequiredLength = 4;
                options.Password.RequiredUniqueChars = 1;
                options.User.RequireUniqueEmail = true;
                options.SignIn.RequireConfirmedEmail = false;
                options.SignIn.RequireConfirmedPhoneNumber = false;
                
                
                
            });
            
           JwtSecurityTokenHandler.DefaultMapInboundClaims = false;

           services.AddAuthentication(options =>
               {
                   options.DefaultScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                   options.DefaultChallengeScheme = "oidc";
               })
               .AddCookie(IdentityServerConstants.ExternalCookieAuthenticationScheme)
               .AddOpenIdConnect("oidc", "IdentityServer", options =>
               {
                
                   options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                   options.SignOutScheme = IdentityServerConstants.SignoutScheme;
                   options.SaveTokens = true;
                   
                   options.Authority = "https://localhost:5002";

                   options.ClientId = "mvc";
                   options.ClientSecret = "secret";
                   options.ResponseType = "code";
                   
                   options.SaveTokens = true;
                   
               });

        }

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Computer}/{action=Index}/{id?}");
                endpoints.MapRazorPages();
            });
        }

IdentityServer4 startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddMvc();

            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

            var builder = services.AddIdentityServer(options =>
                {
                    options.Events.RaiseErrorEvents = true;
                    options.Events.RaiseInformationEvents = true;
                    options.Events.RaiseFailureEvents = true;
                    options.Events.RaiseSuccessEvents = true;

                    // see https://identityserver4.readthedocs.io/en/latest/topics/resources.html
                    options.EmitStaticAudienceClaim = true;
                })
                .AddInMemoryIdentityResources(Config.IdentityResources)
               // .AddInMemoryApiScopes(Config.ApiScopes)
                .AddInMemoryClients(Config.Clients)
                .AddAspNetIdentity<ApplicationUser>();
            
            builder.AddDeveloperSigningCredential();

           
        }

 public void Configure(IApplicationBuilder app)
        {
            if (Environment.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }

            app.UseStaticFiles();
            
            app.UseRouting();
            app.UseIdentityServer();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); });
        }

IdentityServer config.cs

public static class Config
    {
        public static IEnumerable<IdentityResource> IdentityResources =>
            new IdentityResource[]
            {
                new IdentityResources.OpenId(),
                new IdentityResources.Profile(),
            };

        public static IEnumerable<ApiScope> ApiScopes =>
            new ApiScope[]
            {
                new ApiScope("openid"),
                new ApiScope("profile"),
            };

        public static IEnumerable<Client> Clients =>
            new Client[]
            {
               
                new Client
                {

                    ClientId = "mvc",
                    ClientSecrets = { new Secret("secret".Sha256()) },

                    AllowedGrantTypes = GrantTypes.Code,

                    RedirectUris = {"https://localhost:5001/signin-oidc"},
                    FrontChannelLogoutUri = "https://localhost:5001/signout-oidc",
                    PostLogoutRedirectUris = {"https://localhost:5001/signout-callback-oidc"},
                    
                    AllowOfflineAccess = true,
                    
                    AllowedScopes = new List<string>
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile,
                    }
                },
            };
    }


Solution 1:[1]

I fixed it by using IdentityConstants.ExternalScheme instate of IdentityServerConstants.ExternalCookieAuthenticationScheme

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 FunnyDEV