ОБНОВЛЕНИЕ:
После дальнейшего тестирования кажется, что настройка 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.