Фон
Я следовал этому руководству из Okta: https://developer.okta.com/quickstart/#/ios/dotnet/aspnetcore
Реализовал версию компонента AppAuth.iOS с открытым исходным кодом из Xamarin, чтобы иметь возможность использоватьэто в проекте Xamarin.iOS.(работает)
Создан простой основной веб-сервис asp.net, как показано в статье выше, и настроен в соответствии с инструкциями.
Проблема:
Я получаю токен доступа JWT после успешной аутентификации через мобильное приложение и использую этот токен для вызова тестового веб-сервиса.Веб-службе не удается проверить токен со следующим сообщением об ошибке
Ошибка:
Signature validation failed. Unable to match keys: 'HD3v3KXvARUyg_9i26m2i8itsCY7TpA0-ajhcOsBdkM',
token: '{"alg":"RS256","typ":"JWT","kid":"HD3v3KXvARUyg_9i26m2i8itsCY7TpA0-ajhcOsBdkM"}.{"ver":1,"jti":"AT.J4uuLmOgCLslqlnUzNbjhw7dzm5KurJVJxHNIXZx-g8.zQJUh4NcHWcIBvdWVLy7fXea4cCoPxv7Avh3+z6PiGM=","iss":"https://dev-111111.oktapreview.com","aud":"https://dev-111111.oktapreview.com","sub":"dsamuylov@111111.com","iat":1527861992,"exp":1527865592,"cid":"0oafa27024puCyvwi0h7","uid":"00uf9rphkt6D8gcXI0h7","scp":["offline_access","openid","profile"]}'.
at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters)
at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken)
at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
Отладка:
После проверки токена JWT с помощью https://jwt.io/ я обнаружил kid
открытого ключа подписи, используемого для подписи токена
Затем я перешел к конфигурации openid-connect моей учетной записиhttps://dev -111111.oktapreview.com / oauth2 / default / .well-known / openid-configuration
Найдены ключи url https://dev -111111.oktapreview.com/ oauth2 / default / v1 / keys
Там указан только 1 ключ, и его kid
не совпадает с ключом в заголовке токена
Вопрос:
Почему это произойдет, если я использую одну учетную запись / сервер Okta для мобильного клиента и веб-службы?Откуда исходит это ключевое несоответствие?
Действительно надеясь, что кто-то из технической команды Okta сможет взвесить и пролить свет на это, потому что, как есть, пошаговое руководство, связанное в начале вопроса, не работает.
Спасибо,
Дмитрий