РЕДАКТИРОВАТЬ: я частично ответил на свой вопрос. Для тех, кому интересно, в базе данных есть еще одна таблица с именем ClientProperties
, которую вы можете использовать для установки других свойств, не входящих в основную клиентскую таблицу. Я сделал это, но ошибка осталась:
Моя запись для конфигурации клиента выглядит так:
Работая над этим дальше (я вручную определил политику содержимого), это ошибка, на которой я застрял:
--------------------- Исходный вопрос ---------------------
У меня есть настройка IdentityServer4 с использованием EntityFramework для моих данных конфигурации и операций.
Я столкнулся с проблемой при попытке разрешить ajax обрабатывать перенаправления при входе в приложение. Вместо того, чтобы пытаться жестко запрограммировать все, я пытался настроить CORS в IDS4.
Я читал документ ЗДЕСЬ. В нем говорится о настройке AllowedCorsOrigins
на клиенте, чтобы сервер идентификации правильно настроил CORS. Проблема, с которой я сталкиваюсь, заключается в том, что в базе данных у клиентов нет столбца с именем AllowedCorsOrigins
. На самом деле в модели openId отсутствует много столбцов. /а>.
На моем сервере идентификации моя конфигурация DI выглядит следующим образом:
services.AddIdentity < IdentityUser, IdentityRole > ()
.AddUserManager < ApplicationUserManager < IdentityUser >> ()
.AddSignInManager < ApplicationSignInManager < IdentityUser >> ()
.AddEntityFrameworkStores < ApplicationDbContext > ();
services.AddIdentityServer()
.AddAspNetIdentity < IdentityUser > ()
.AddConfigurationStore(options => {
options.ConfigureDbContext = builder => builder.UseSqlServer(
configuration.GetConnectionString("IdentityConnection"),
opt => opt.MigrationsAssembly(startupName));
})
.AddOperationalStore(options => {
options.ConfigureDbContext = builder => builder.UseSqlServer(
configuration.GetConnectionString("IdentityConnection"),
opt => opt.MigrationsAssembly(startupName));
})
.AddProfileService < ApplicationProfileService < IdentityUser >> ()
.AddDeveloperSigningCredential();
И на моем клиенте настройка DI выглядит следующим образом:
services.AddAuthentication(options => {
options.DefaultScheme = "cookie";
options.DefaultChallengeScheme = "oidc";
}).AddCookie("cookie")
.AddOpenIdConnect("oidc", options => {
options.Authority = appSettings.App.AuthorityUrl;
options.ClientId = appSettings.App.ClientId;
options.ClientSecret = appSettings.App.ClientSecret;
options.ResponseType = ResponseTypes.Code;
options.UsePkce = true;
options.ResponseMode = "query";
options.GetClaimsFromUserInfoEndpoint = true;
options.ClaimActions.MapJsonKey("role", "role", "role");
options.ClaimActions.MapJsonKey("nickname", "nickname", "nickname");
options.ClaimActions.MapJsonKey(JwtClaimTypes.Picture, JwtClaimTypes.Picture, JwtClaimTypes.Picture);
options.TokenValidationParameters.RoleClaimType = "role";
var test = options.ClaimActions;
options.Scope.Add(appSettings.App.Scopes[0]);
options.SaveTokens = true;
});
Мне трудно понять, где я должен определять AllowedCorsOrigins
, поскольку все примеры, которые я видел, находятся в примерах памяти. Я бы подумал, что это свойство должно быть в базе данных на клиентской таблице...
Вот посмотрите, к каким значениям у меня есть доступ в базе данных: