OpenIddict: использование AddDevelopmentSigningCertificate()

Я создал приложение Asp.Net Core 2.2 с DefaultIdentity, используя OpenIddict с неявным потоком. Это приложение работает в контейнере Docker. Я пытаюсь использовать опцию AddDevelopmentSigningCertificate() для своей среды разработки.

 services.AddOpenIddict()
                .AddCore(options =>
                {
                    options.UseEntityFrameworkCore()
                           .UseDbContext<ApplicationDbContext>();
                })
                .AddServer(options =>
                {
                    options.UseMvc();
             options.EnableAuthorizationEndpoint("/connect/authorize");
             options.RegisterScopes(OpenIdConnectConstants.Scopes.Email, OpenIdConnectConstants.Scopes.Profile, OpenIddictConstants.Scopes.Roles);
                    options.AllowImplicitFlow();
                    options.DisableHttpsRequirement();
                    options.AddDevelopmentSigningCertificate();
                    options.UseJsonWebTokens();
                })
                .AddValidation();

Затем у меня есть приложение веб-API Asp.Net Core 2.2, также работающее в контейнере Docker. Я использую Swagger через Swashbuckle и JWT Bearer Authentication.

            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
            JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

            }).AddJwtBearer(options =>
            {
                options.Authority = identityUrl;
                options.RequireHttpsMetadata = false;
                options.Audience = "supplier-service";
            });

(identityUrl — это URL контейнера Docker сервера авторизации)

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

Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10501: Ошибка проверки подписи. Невозможно сопоставить ключи: ребенок: «[ПИИ скрыта]», токен: «[ПИИ скрыта]».

Что я упускаю или что я делаю не так?


person Palmi    schedule 23.01.2019    source источник
comment
Полученное исключение указывает на то, что обработчик носителя JWT не смог найти ключ безопасности, используемый для подписи маркера доступа в документе обнаружения OIDC. В этом случае я подозреваю, что сертификат X.509, первоначально сгенерированный OpenIddict, не был сохранен и, следовательно, не был раскрыт и повторно использован после перезапуска вашего контейнера Docker. Убедитесь, что хранилище X.509, используемое .NET Core (~/.dotnet/corefx/cryptography/x509stores в Linux), указывает на постоянную папку.   -  person Kévin Chalet    schedule 26.01.2019
comment
Я посмотрел в работающем контейнере своего сервера идентификации. Я проверил ваш путь и нашел сертификат .pfx в папке ~/.dotnet/corefx/cryptography/x509stores/my. Я предполагаю, что это тот, который сгенерировал OpenIddict. Почему он не находит ключ безопасности?   -  person Palmi    schedule 27.01.2019
comment
Извини. Это я был виноват. URL-адрес центра был неправильным. Но спасибо за разъяснение пути сертификата внутри контейнера докеров. Это хорошо знать   -  person Palmi    schedule 27.01.2019
comment
Рад, что вы решили свою проблему!   -  person Kévin Chalet    schedule 27.01.2019


Ответы (1)


Неверный URL-адрес параметра «Авторитет» для AddJwtBearer. На случай, если кто-то получит такое же вводящее в заблуждение сообщение об ошибке.

person Palmi    schedule 27.01.2019