IdentityServer4 в образах Docker, работающих в репозиториях Linux и Azure, и проблема аутентификации - PullRequest
0 голосов
/ 26 мая 2018

Мое решение состоит из трех проектов:

  1. Проект ASP.NET MVC Core, в котором размещен IdentityServer.
  2. Проект ASP.NET Core API, который защищени управляет IdentityServer.
  3. Другое ядро ​​ASP.NET MVC, которое вызывает API.

Таким образом, клиент MVC должен отправлять на каждый запрос также access_token в API.Если я запускаю решение с помощью команды docker-compose, это работает, но если я помещаю / извлекаю изображения в / из репозиториев Azure, у меня возникает проблема.

Я получаю сообщение об ошибке: ErrorMessage: Bearer error="invalid_token", error_description="The signature key was not found"

Это моя конфигурация

services.AddIdentityServer()
    .AddDeveloperSigningCredential()
    .AddAspNetIdentity<ApplicationUser>()
    .AddConfigurationStore(options =>
    {
        options.ConfigureDbContext = builder =>
            builder.UseNpgsql(connectionString,
                sql => sql.MigrationsAssembly(migrationsAssembly));
    })
    .AddOperationalStore(options =>
    {
        options.ConfigureDbContext = builder =>
            builder.UseNpgsql(connectionString,
                sql => sql.MigrationsAssembly(migrationsAssembly));
        options.EnableTokenCleanup = true;
        options.TokenCleanupInterval = 30;
    });

services.AddAuthentication(IdentityServerConstants.DefaultCookieAuthenticationScheme)
    .AddIdentityServerAuthentication(options =>
    {
        options.Authority = EnvironmentReader.AuthorityUrl;
        options.ApiName = "api1";
        options.RequireHttpsMetadata = false;
    });

1 Ответ

0 голосов
/ 29 мая 2018

Это проблема с AddDeveloperSigningCredential против AddSigningCredential.С AddDeveloperSigningCredential каждый раз, когда вы перезапускаете IdentityServer, материал ключа будет изменять все токены, которые были подписаны с помощью предыдущего материала ключа, не будет проверяться.«Временный» действительно только для ситуаций, когда у вас нет другого доступного ключевого материала.

следующее находится на странице документации, найденной здесь Документация

AddDeveloperSigningCredential

Создает временный ключевой материал во время запуска.Это только для сценариев разработки, когда у вас нет сертификата для использования.Сгенерированный ключ будет сохранен в файловой системе, поэтому он остается стабильным между перезапусками сервера (можно отключить, передав false).Это устраняет проблемы, когда кэши метаданных клиента / API теряют синхронизацию во время разработки.

VS

AddSigningCredential

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

Мой код:

Строка из моей конфигурации

 services.AddIdentityServer()
            .AddSigningCredential(LoadCertificate())

Дополнительный метод

private X509Certificate2 LoadCertificate()
    {
        return new X509Certificate2("../../certs/TestCertificate.pfx",
            "pass");
    }
...