Описание: Когда сервер микросервиса Bet запускается, ему никогда не удается создать верификатор RSA, потому что его значение равно нулю. Я разрабатываю архитектуру на основе микросервисов с использованием Oauth2, руководствуясь архитектурой микросервисов, разработанной Jhipster:
- UAA server. Он предоставляет ключ publi c для проверки подписи JWT.
- Eureka server.
- Cloud Config Server.
- Bet микросервисный сервер. При запуске попробуйте получить ключ publi c для проверки подписанного JWT.
Конфигурация Euraka для каждого сервера:
Сервер Eureka :
eureka:
client:
fetch-registry: false
register-with-eureka: false
instance-info-replication-interval-seconds: 10
registry-fetch-interval-seconds: 10
service-url:
defaultZone: http://admin:${spring.security.user.password:admin}@${eureka.instance.hostname}:${server.port}/eureka/
instance:
hostname: localhost
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
Сервер UAA:
eureka:
client:
service-url:
defaultZone: http://admin:eureka@localhost:8761/eureka/
instance-info-replication-interval-seconds: 10
registry-fetch-interval-seconds: 10
instance:
appname: uaa
instanceId: uaa:${spring.application.instance-id:${random.value}}
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
Ставка на микросервис :
eureka:
client:
service-url:
defaultZone: http://admin:eureka@localhost:8761/eureka/
instance-info-replication-interval-seconds: 10
registry-fetch-interval-seconds: 10
instance:
appname: uaa
instanceId: uaa:${spring.application.instance-id:${random.value}}
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
При попытке использовать услугу, опубликованную микросервисом Bet: http://localhost: 8083 / api / market, возвращается следующий ответ :
{
"error": "invalid_token",
"error_description": "public key expired"
}
status: 401 Unauthorize
Прослеживая код, я обнаружил, что в классе org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter атрибут this.verifier имеет значение null внутри метода afterPropertiesSet (), генерирующего исключение (logger. warn ("Невозможно создать верификатор RSA из verifierKey (игнорируется при использовании MA C)")), потому что мне не удалось запустить новый объект RsaVerifier (this.verifierKey)
Я думал, что это произошло из-за время задержки регистрации микросервиса на сервере eureka, поэтому я ждал больше 5 минут и проверил через клиент Postman, доступен ли ключ publi c, и даже в этом случае микросервис Bet не смог создать верификатор RSA.
Итак,
Почему микросервис Bet при запуске не смог создать верификатор RSA?
Может быть, не удалось получить ключ publi c при запуске микросервиса, который не еще не зарегистрированы на сервере eureka?