IdentityServer Access - перенаправить один сервер на другой. - PullRequest
0 голосов
/ 06 августа 2020

У меня есть веб-API и приложение IdentityServer4, работающее на windows сервере «Сервер 1», и мы используем «access_token» для авторизации вызова API. Теперь клиент хочет развернуть приложение IdentityServer4 еще на одном сервере windows «Сервер 2». Для этого я выполнил следующие шаги.

1.Создал сертификат с помощью openssll.

2. Конвертировал сертификат в .pfx с паролем.

3. Добавлен ниже код для загрузки сертификата из windows store

X509Certificate2 cert = null;
            using (X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine))
            {
                certStore.Open(OpenFlags.ReadOnly);
                X509Certificate2Collection certCollection = certStore.Certificates.Find(
                    X509FindType.FindByThumbprint,
                    // for dev only
                    "57041fcc9086da18419999fbb9276bd59bd8d14a",false);

                    cert = certCollection[0];
            }          
            return cert;
Скопировал файл .pfx на серверы 1 и 2 и установил тот же.

5. Теперь я генерирую access_token с сервера 2 и передаю этот токен в веб-API (работающий на сервере 1) и «Полномочия», указывающие на IdentityServer, работающий на сервере 1.

Но это не работает, и я получаю ошибку «Неавторизованный».

Это ясно показывает, что я здесь что-то делаю неправильно .

Пожалуйста, помогите мне, заранее спасибо

Запрос токена доступа: введите описание изображения здесь

Ответ токена: введите описание изображения здесь

Сравнение токенов с 2 серверов: введите описание изображения здесь

1 Ответ

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

Если у вас несколько серверов идентификации, они должны использовать один и тот же ключ подписи.

См. страницу о материалах ключа.

Если вы используете AddDeveloperSigningCredential, тогда на каждой машине будет свой набор ключей private / publi c.

Сертификат HTTPS не совпадает с сертификатом подписи токена. Если проблема не в этом, возможно, аудитория не соответствует ожидаемой аудитории, когда клиент получает токен. Проверьте параметр ValidateAudience . Для простоты аудитория (утверждение aud) в токене должна быть одинаковой для обоих IdentityServers.

Если из классов аутентификации вам не помогает, то вы всегда можете отключить все функции проверки токенов в этом class , а затем включите их один за другим, чтобы выяснить, что вызывает у вас проблемы.

Если это также может быть проблема эмитента, поскольку два токена имеют разные проблемы, возможно, клиенты ожидают специфику c эмитент в токенах. Может быть, вам стоит поставить балансировщик нагрузки перед двумя IdentityServers, чтобы у них был один и тот же эмитент?

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