«IdentityServer4 + Core Identy + PostgreSql» не может войти в систему, возвращая Sub Claim Missing - PullRequest
0 голосов
/ 12 января 2020

Я настраиваю проект в соответствии с руководством по Identity Server 4 http://docs.identityserver.io/en/latest/quickstarts/6_aspnet_identity.html.

Сочетание которого включает в себя все, включая API, JavaScript клиент, MVC клиент и сервер удостоверений согласно указанным учебникам.

Он использует постоянное хранилище EF, а не в памяти, и использует ASP Core Identity, как, наконец, коснуться.

С SQL Сервером он работает нормально, однако я хотел перейти на PostgresSQL как часть самообучения (и, честно говоря, предпочел бы это вместо sqlserver).

Все работало до того момента, когда я захожу в систему, когда выдает эту ошибку:

InvalidOperationException: отсутствует подпретензия

Я прошел весь код, но не могу понять, почему это так.

Только изменения, которые я сделал это в файле запуска Identity Server 4:

// CHANGE HERE: UseNpgsql instead of UseSqlServer

services.AddDbContext<ApplicationDbContext>(options => options.UseNpgsql(Configuration.GetConnectionString("PostgresqlConnection")));

services.AddIdentity<ApplicationUser, IdentityRole>()
      .AddEntityFrameworkStores<ApplicationDbContext>()
      .AddDefaultTokenProviders();

var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;
string connectionString = Configuration.GetConnectionString("PostgresqlConnection").ToString();

var builder = services.AddIdentityServer(options =>
    {
        options.Events.RaiseErrorEvents = true;
        options.Events.RaiseInformationEvents = true;
        options.Events.RaiseFailureEvents = true;
        options.Events.RaiseSuccessEvents = true;
    })
    .AddConfigurationStore(options =>
    {
        // CHANGE HERE: UseNpgsql instead of UseSqlServer 
        options.ConfigureDbContext = b => b.UseNpgsql(connectionString,
            sql => sql.MigrationsAssembly(migrationsAssembly));
    })
    .AddOperationalStore(options =>
    {
        // UseNpgsql instead of UseSqlServer
        options.ConfigureDbContext = b => b.UseNpgsql(connectionString,
            sql => sql.MigrationsAssembly(migrationsAssembly));
    });

Куда бы я ни посмотрел, это единственное изменение, которое мне нужно сделать.

Net Используется Core 3.1.

Любой совет, чего не хватает?

РЕДАКТИРОВАТЬ 1:

Кажется, проблема в ASP Core Identity и PostgreSQL. До сих пор не могу понять, как это исправить.

Ответы [ 2 ]

1 голос
/ 18 января 2020

Похоже, вам не хватает .AddAspNetIdentity (). Ваш окончательный «строитель» должен выглядеть так:

var builder = services.AddIdentityServer(options =>
    {
        options.Events.RaiseErrorEvents = true;
        options.Events.RaiseInformationEvents = true;
        options.Events.RaiseFailureEvents = true;
        options.Events.RaiseSuccessEvents = true;
    })
    .AddConfigurationStore(options =>
    {
        // CHANGE HERE: UseNpgsql instead of UseSqlServer 
        options.ConfigureDbContext = b => b.UseNpgsql(connectionString,
            sql => sql.MigrationsAssembly(migrationsAssembly));
    })
    .AddOperationalStore(options =>
    {
        // UseNpgsql instead of UseSqlServer
        options.ConfigureDbContext = b => b.UseNpgsql(connectionString,
            sql => sql.MigrationsAssembly(migrationsAssembly));
    })
    .AddAspNetIdentity<ApplicationUser>();
0 голосов
/ 14 января 2020

вы используете тот же сценарий миграции для postgres? Вы пытались удалить SQL Сервер миграции и заново создать сценарий миграции с postgres?

IdentityServer4 имеет хорошую запись в журнал, вы можете опубликовать результат журнала здесь

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