#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. Я опубликую этот код.