нуб здесь. Я следил за QuickStarts для IdentityServer 4. Я собираюсь очистить код. Я использую Net Core 3.1. Мой Startup.ConfigureServices стал переполненным, и я хотел очистить его и поместить параметры конфигурации, значения в класс - точно так же, как IdentityServer 4 использует класс для параметров конфигурации IdentityResources, ApiScopes, ApiResources и Client.
Я прочитал много сообщений в блогах и вижу из https://andrewlock.net/avoiding-startup-service-injection-in-asp-net-core-3/, как добавить конфигурацию в контейнер Io C для настраиваемых служб, но я не нашел способа вытащите параметры / значения для сервисов фреймворка, таких как Identity Core или services.AddAuthentication().AddOpenIdConnect()
, например.
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
options.AccessDeniedPath = "/account/denied";
})
.AddOpenIdConnect("oidc", options =>
{
/*** HOW DO I PUT THE BELOW KEY/VALUES INTO A CONFIG CLASS ***/
options.Authority = "https://demo.identityserver.io";
options.ClientId = "server.hybrid";
options.ClientSecret = "secret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.Scope.Clear();
options.Scope.Add("openid");
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
});
И используйте этот класс конфигурации следующим образом:
var builder = services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.IdentityResources) <-- From the Config class
.AddInMemoryApiScopes(Config.ApiScopes) <-- From the Config class
.AddInMemoryClients(Config.Clients); <-- From the Config class
Так что в случае, если мой вопрос не был ясен, как я могу создать класс Config и передать этот класс в .AddOpenIdConnect(MyConfigClass)
для очистки метода ConfigureServices (Io C Container?)
Является ли приведенный выше код лучшим / самым чистым способом настроить службы в контейнере Io C? Я ищу ответ в сообщении блога Эндрю Лока, но я его просто не понял? Я предполагаю, что могу передать класс в метод расширения .AddOpenIdConnect так же, как я могу с IS4 .AddInMemoryIdentityResources
Спасибо за помощь.