Можно ли использовать .AddOperationalStore для PersistedGrants с .InMemoryResources/Cients?

Я хотел бы сохранить PersistedGrants в базе данных для масштабирования Azure.

Я предпочитаю читать IdentityResources/ApiResources/Clients(Config) из appsettings.json, а не из базы данных.

Из инструкции на сайте документации IdentityServer4 показан пример сохранения оба в базу.

Можно ли не загружать данные конфигурации в базу данных при сохранении грантов? Если да, то как?

Это работает:

        services.AddIdentityServer((options) =>
        {
            options.UserInteraction = new UserInteractionOptions
            {
                LoginUrl = "/login",
                LogoutUrl = "/api/Account/Logout",
                ErrorUrl = "/error"
            };
        })
       .AddSigningCredential(X509CertificateHelper.getCert(_env))            
       .AddOperationalStore(builder => builder.UseSqlServer(connectionString,
           options => options.MigrationsAssembly(migrationsAssembly)))           
       .AddConfigurationStore(builder => builder.UseSqlServer(connectionString,
           options => options.MigrationsAssembly(migrationsAssembly)))
       .AddAspNetIdentity<ApplicationUser>();

Это не так. В частности, я не могу запустить dotnet ef database update -c PersistedGrantDbContext.

        services.AddIdentityServer((options) =>
        {
            options.UserInteraction = new UserInteractionOptions
            {
                LoginUrl = "/login",
                LogoutUrl = "/api/Account/Logout",
                ErrorUrl = "/error"
            };
        })
        .AddSigningCredential(X509CertificateHelper.getCert(_env))           
        .AddOperationalStore(builder => builder.UseSqlServer(connectionString,
            options => options.MigrationsAssembly(migrationsAssembly)))
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddInMemoryApiResources(Config.GetApiResources())
        .AddInMemoryClients(Config.GetClients(AppSettingsHelper.GetIdSrvrSettings()))
        .AddAspNetIdentity<ApplicationUser>();

Для последнего я получаю следующую ошибку:

Произошла ошибка при вызове метода «ConfigureServices» в классе запуска «Startup». Рассмотрите возможность использования IDbContextFactory для переопределения инициализации DbContext во время разработки. Ошибка: невозможно выполнить привязку среды выполнения к нулевой ссылке.


person ttugates    schedule 24.03.2017    source источник


Ответы (1)


«Возможно ли не загружать данные конфигурации в базу данных при сохранении грантов? Если да, то как?»

Да, это так. Вы используете работу EntityFrame для своего сохранения, поэтому информация, которую я даю, может быть не полностью совместимой ... мы используем что-то еще для управления сохранением базы данных.

Наш ConfigureServices выглядит примерно так:

services.AddIdentityServer(x =>
            {
                x.IssuerUri = webServerSettings.Host;
            })
            .AddInMemoryApiResources(Config.GetApiResources())
            .AddInMemoryClients(Config.GetClients())
            .AddInMemoryIdentityResources(Config.GetIdentityResources());

services.AddTransient<IPersistedGrantStore, PersistedGrantStore>();

Таким образом, наши IdentityResources, ApiResources и Clients извлекаются из файлов конфигурации, а наши Grants управляются нашей собственной реализацией IPersistedGrantStore. Мы не делаем ничего особенного с этим интерфейсом: это очень простой интерфейс, который можно реализовать с помощью нескольких простых методов для подключения.

person Mashton    schedule 27.03.2017