Как правильно выставить мой подписывающий ключ publi c для сгенерированных CAS билетов JWT - PullRequest
0 голосов
/ 30 января 2020

ОБНОВЛЕНИЕ:

После дальнейшего тестирования кажется, что настройка RSA, которая, как я думал, работает, на самом деле не работает. Пока CAS не сможет поддерживать асимметричные ключи c для билетов JWT, этот вопрос не будет иметь значения.

Мой вариант использования:

CAS VERSION: 6.2.0-RC2

Использование CAS для единого входа для ряда приложений. Бэкэнд-провайдер идентификации - LDAP. Интересующий клиент - это SPA, который перенаправляет на CAS для входа в систему. После успешного входа в CAS JWT выдается через настроенного поставщика услуг. Я настроил поставщика услуг, чтобы подписать JWT, используя ключи asymmetri c через RSA. Это все работает. То, что я не могу заставить работать - это конечная точка привода "jwtTicketSigningPublicKey".

Я хочу иметь возможность публиковать sh ключ publi c, чтобы мой SPA мог динамически получать ключ publi c для проверки вывесок, чтобы при необходимости я мог вращать ключи RSA без необходимости что-либо менять на стороне SPA. Я предполагал, что это было целью этой функции, но когда я попал в конечную точку после выставления ее в соответствии с указаниями здесь , я получил 404.

Моя конфигурация:

Здесь Вот как выглядит мой файл cas.config, относящийся к этой конечной точке:

# Expose it
management.endpoints.web.exposure.include=jwtTicketSigningPublicKey
# Enable it
management.endpoint.jwtTicketSigningPublicKey.enabled=true
# Allow access to it
cas.monitor.endpoints.endpoint.jwtTicketSigningPublicKey.access=ANONYMOUS

Затем я отскакиваю сервер CAS и вижу конечную точку в ссылках привода на http://mycas.com/cas/actuator вот так:

"jwtTicketSigningPublicKey":{"href":"http://mycas.com/cas/actuator/jwtTicketSigningPublicKey","templated":false}

Поскольку документ ссылается на этот документ, я могу передать необязательный параметр службы, например, чтобы получить ключ publi c, связанный с реализацией "для каждой службы", и это то, что я иметь. Я нажимаю на конечную точку следующим образом:

http://mycas.com/cas/actuator/jwtTicketSigningPublicKey?service=http://example.org

В этот момент я получаю 404. Я также получаю 404, если попаду в конечную точку без параметра обслуживания. Но я ожидаю, что, поскольку на самом деле у меня нет глобально определенной пары RSA.

Моя попытка решения:

Самое логичное место, которое я могу себе представить, это ключ publi c, Быть предоставленным находится в конфигурации сервиса наряду с тем, где я предоставляю закрытый ключ. Однако я не могу найти никакого документированного параметра, по которому можно определить ключ publi c. Это то, что я пытался безрезультатно.

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^http://.*",
  "name" : "Sample",
  "id" : 10,
  "properties" : {
    "@class" : "java.util.HashMap",
    "jwtAsServiceTicket" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "true" ] ]
    },
    "jwtSigningSecretAlg" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "RS256" ] ]
    },
    "jwtAsServiceTicketSigningKey" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "MyPrivateKeyGoesHere" ] ]
    },
    "jwtAsServiceTicketSigningPublicKey" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "MyPublicKeyGoesHere" ] ]
    }
  }
}

Ключ подписи работает и является документированным параметром . Кроме того, секретный алгоритм подписи задокументирован здесь . Но последний параметр «... SigningPublicKey» был полным снимком в темноте, потому что я не нашел никаких документов по этому вопросу, кроме того, что определено здесь .

Резюме:

Итак, я надеюсь найти этот вопрос, кто-то, кто знаком с этой конечной точкой и как правильно ее настроить, чтобы сделать подписывающий ключ c public доступным для моего SPA.

...