У меня есть приложение IdentityServer4 на основе образца IS4 Identity и API с использованием токенов-носителей для его авторизации через IS4.AccessTokenValidation. Это отлично работает на localhost через VisualStudio, а когда я развертываю VMware Windows 2012 и размещаюсь через IIS. Когда я развертываю сервер Identity на Azure в качестве веб-сайта службы приложений, все тоже в порядке. Однако, когда API развертывается как Служба приложений с использованием того же домена и сертификата, что и виртуальная машина, любой метод с атрибутом Authorize (с политикой или без него) всегда возвращает 401 с сообщением заголовка:IdentityServer4 Авторизоваться всегда получает «Ключ подписи не найден» в Azure AppService
Www-Authenticate: Bearer error="invalid_token", error_description="The signature key was not found"
Мы используем .NET 4.5.2 с последними версиями пакетов IdentityServer4 и IdentityServer4.AccessTokenValidation. Я также вытащил последние из этих пакетов из GitHub с 30/08/16 без каких-либо изменений. Я не думаю, что это ошибка IS4 Validator в любом случае, но я не знаю, что может вызвать это. Какие-либо предложения? Это ошибка хозяина Azure?
Мне бы очень хотелось отлаживать это, но я не могу заставить Remote Debug работать в этом приложении, даже когда я перестраивал с нуля, и журналы приложений ничего не говорят мне. У меня был рывок в репозитории ASP.NET Security, но без дополнительного доступа к журналу или отладки я довольно не знаю, как исправить эту проблему.
API Настройка очень проста:
var jwtBearerOptions = new JwtBearerOptions()
{
Authority = Configuration["Authentication:IdentityServer:Server"],
Audience = Configuration["Authentication:IdentityServer:Server"]+"/resources",
RequireHttpsMetadata = false,
AutomaticAuthenticate = true,
AutomaticChallenge = true,
};
app.UseJwtBearerAuthentication(jwtBearerOptions);
и Сервер идентификации прямо из образцов, а также с использованием приобретенного сертификата для подписания.
Кто-нибудь еще получил эту конфигурацию, полностью работающую как 2 Azure App Services? Или то, что может вызвать эту ошибку, при условии, что один и тот же токен-носитель, отправленный в размещенный в VM API, является приемлемым.
Аналогичный случай для idsrv3 обсуждался на https://gitter.im/IdentityServer/IdentityServer3/archives/2015/04/13. Я понимаю, что проблема возникает из-за отсутствия метаданных сервера идентификации ('.well-known/open-configuration'). Кроме того, для большего количества протоколирования настройте ведение журнала ядра aspnet в вашем 'api' (вы можете включить его для записи в текстовый файл с помощью serilog) и проверить журналы ошибок. –
Интересная возможность в этой теме о размере токена. Шахта довольно большая, но я ожидаю, что это проблема на всех хостах. Будет играть с ним. Вы правы насчет регистрации, я добавлю Serilog. Посмотрите, что выйдет. – user1587195
Получение большего количества журналов было тем, что мне действительно нужно, и просмотром кода репозитория безопасности. По-видимому, по какой-то причине должна быть разница в параметрах проверки SigningKey в службе приложений. – user1587195