Ошибка входа на сервер идентификации в ядре MVC: ошибка при загрузке внешней информации для входа

#asp.net-core-mvc #visual-studio-2019 #identityserver4

#asp.net-core-mvc #visual-studio-2019 #identityserver4

Вопрос:

среды: MVC Core 3.1, VS2019, IdentityServer4

Я создал asp.net основное веб-приложение в VS2019 с «индивидуальной учетной записью пользователя». Модифицировано, чтобы использовать IdentityServer для аутентификации пользователей (у нас есть служба аутентификации, созданная с IdentityServer4). Когда я вхожу в систему, нажав кнопку «OpenIdConnect», я был правильно перенаправлен на IdentityServer, где я ввел имя пользователя и пароль и успешно прошел аутентификацию (я могу проверить это из журнала IdentityServer). Но при перенаправлении обратно в мое приложение я получил эту ошибку «Ошибка при загрузке внешней информации для входа»..

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

IdentityServer не должен быть проблемой, поскольку у нас есть другие приложения, созданные с использованием веб-форм, и MVC успешно проходит аутентификацию с его помощью. Но это наш первый проект MVC Core с использованием IdentityServer, поэтому я не знаю, не хватает ли мне некоторых параметров.

Я обыскал весь Интернет, но не нашел решения. Пожалуйста, помогите.

Мой код в Startup.cs выглядит следующим образом:

 public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages();

    services.AddAuthentication(options =>
    {
        options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = "oidc";
    })
        .AddCookie("Cookies")
        .AddOpenIdConnect("oidc", options =>
        {
            options.SignInScheme = "Cookies";

            options.Authority = "[my-identityserver-url]";
            options.RequireHttpsMetadata = true;

            options.ClientId = "[my-client-id]";
            options.ClientSecret = "[my-client-secret]";

            options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
            options.UsePkce = true;

            options.SaveTokens = true;
            options.GetClaimsFromUserInfoEndpoint = true;

            options.Scope.Clear();
            options.Scope.Add("openid");
            options.Scope.Add("profile");

            options.GetClaimsFromUserInfoEndpoint = true;
            options.SaveTokens = true;

            options.TokenValidationParameters = new TokenValidationParameters
            {
                NameClaimType = JwtClaimTypes.Name,
                RoleClaimType = JwtClaimTypes.Role,
            };
        });
}
  

Настройки на сервере идентификации —

URI перенаправления входа: https://localhost:44313/signin-oidc

URI перенаправления после выхода из системы: https://localhost:44313/

Области: OpenID, профиль

Типы предоставления: гибридный, client_credentials

Происхождение CORS: https://localhost:44313/

https://localhost:44313 / — URL веб-приложения.

Комментарии:

1. Во всех реализациях MVC client IS4, которые я выполнил в .Net Core, я использовал тип ответа «Code» (и только Code). Я считаю, что PCKE работает, только если для responseType установлено значение «Code». Попробуйте изменить свой responseType.

2. OpenIdConnectResponseType. CodeIdToken == «код id_token». Когда я поместил туда только «код», я получил сообщение об ошибке: «Извините, произошла ошибка: unauthorized_client»

3. Ваш комментарий немного сбивает с толку. Строка, которую я предлагаю, должна гласить «параметры. responseType = OpenIdConnectResponseType. Код;» Это то, что вы пробовали?

4. Кроме того, какова опция «AllowedGrantTypes» для вашего клиента MVC на стороне IdentityServer4? (в Config.cs)

5. Спасибо. Да, я пробовал варианты. responseType = «code» и получил эту ошибку. Я не вижу опции «AllowedGrantTypes» на стороне IdentityServer4. Я опубликую этот код.