Почему JwtAccessTokenConverter - Невозможно создать верификатор RSA из verifierKey (игнорируется при использовании MA C) при запуске сервера микросервисов? - PullRequest
0 голосов
/ 21 июня 2020

Описание: Когда сервер микросервиса 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.

Итак,

  1. Почему микросервис Bet при запуске не смог создать верификатор RSA?

  2. Может быть, не удалось получить ключ publi c при запуске микросервиса, который не еще не зарегистрированы на сервере eureka?

1 Ответ

0 голосов
/ 21 июня 2020

Наконец, я обнаружил проблему.

Я должен вызвать метод tryCreateSignatureVerifier () при инициализации класса OAuth2JwtAccessTokenConverter (в конструкторе) и попытаться получить publi c key и создать RSA Verifier

...