AspnetBoilerplate IdentityServer - хранилище конфигурации - PullRequest
0 голосов
/ 04 августа 2020

Контекст истории

СОВЕТ : вы можете пропустить это, если вы знакомы с abp + postgres + IdentityServer и с go на Вопрос

В настоящее время я пытаюсь реализовать поставщика удостоверений с помощью AspnetBoilerplate.

Для этого я сделал следующие шаги:

Вы можете увидеть мое решение здесь .

Вопрос

На данный момент у меня есть работающий поставщик удостоверений, но клиенты, ресурсы api и ресурсы идентификации работают в памяти, как вы могли см. :

//AuthConfigurer.cs#L45

services.AddIdentityServer()
          .AddDeveloperSigningCredential()
          .AddInMemoryIdentityResources(IdentityServerConfig.GetIdentityResources())
          .AddInMemoryApiResources(IdentityServerConfig.GetApiResources())
          .AddInMemoryClients(IdentityServerConfig.GetClients())
          .AddAbpPersistedGrants<IAbpPersistedGrantDbContext>()
          .AddAbpIdentityServer<User>();

Итак, теперь я хочу поместить это в EF, для этого я попробовал следующее:

//SSODbContext.cs
using Microsoft.EntityFrameworkCore;
using Abp.Zero.EntityFrameworkCore;
using Coders.SSO.Authorization.Roles;
using Coders.SSO.Authorization.Users;
using Coders.SSO.MultiTenancy;
using Abp.Localization;
using Abp.IdentityServer4;
using IdentityServer4.EntityFramework.Interfaces;
using IdentityServer4.EntityFramework.Entities;
using System.Threading.Tasks;

namespace Coders.SSO.EntityFrameworkCore
{
    public class SSODbContext : AbpZeroDbContext<Tenant, Role, User, SSODbContext>, IAbpPersistedGrantDbContext, IConfigurationDbContext
    {
        /* Define a DbSet for each entity of the application */
        public DbSet<PersistedGrantEntity> PersistedGrants { get; set; }
        public DbSet<Client> Clients { get; set; }
        public DbSet<ApiResource> ApiResources { get; set; }
        public DbSet<IdentityResource> IdentityResources { get; set; }

        public SSODbContext(DbContextOptions<SSODbContext> options)
            : base(options)
        {
        }

        // add these lines to override max length of property
        // we should set max length smaller than the PostgreSQL allowed size (10485760)
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            
            modelBuilder.Entity<ApplicationLanguageText>()
                .Property(p => p.Value)
                .HasMaxLength(100); // any integer that is smaller than 10485760

            modelBuilder.ConfigurePersistedGrantEntity();
        }

        public Task<int> SaveChangesAsync() => base.SaveChangesAsync();
    }
}

Применял новую базу данных миграции и обновления, затем я изменил вызов службы следующим образом:

services.AddIdentityServer()
          .AddDeveloperSigningCredential()
          .AddConfigurationStore<SSODbContext>()
          .AddAbpPersistedGrants<IAbpPersistedGrantDbContext>()
          .AddAbpIdentityServer<User>();

, но не работает, есть идеи, как настроить хранилище конфигурации на AspNetBoilerplate?

1 Ответ

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

Возможно, проблема в том, что вы используете здесь интерфейс?

.AddAbpPersistedGrants<IAbpPersistedGrantDbContext>()

Разве это не должен быть конкретный тип? Зачем вам нужен этот интерфейс?

...