Как извлечь параметры конфигурации из тела метода и использовать класс конфигурации в Dot Net Core 3.1 - PullRequest
0 голосов
/ 07 августа 2020

нуб здесь. Я следил за 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

Спасибо за помощь.

1 Ответ

0 голосов
/ 07 августа 2020

Все службы Microsoft используют один и тот же шаблон Параметры . Во-первых, вы можете переместить эти лямбда-методы в методы stati c, возможно, в разных классах. Это похоже на то, что сделал ваш пример Config. Вам просто нужно убедиться, что ваши методы stati c имеют одинаковую сигнатуру функции.

Например, .AddAuthentication принимает делегат Action<AuthenticationOptions> в качестве аргумента. Так что вместо него можно передать любой метод static void foo(AuthenticationOptions o).

Или вы можете написать службы, реализующие IConfigureOptions<T>, и зарегистрировать их. Это особенно полезно, если вам нужен доступ к другим службам, например к базе данных, чтобы настроить эти типы параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...