Клиент UAA CAS5 IDP OIDC Pac4j В профиле сеанса отсутствует accessToken

Я пытаюсь настроить SSO-сервер UAA (https://github.com/cloudfoundry/uaa) для использования CAS5 в качестве IDP.

Вызов cas / authorize выполняется успешно. URL-адрес обратного вызова вызывается на сервер UAA. Затем сервер UAA пытается вызвать cas / accessToken во время обслуживания конечной точки URL-адреса «обратного вызова» в браузере, то есть внутренний HTTP-запрос возвращается к CAS5.

Я проследил выполнение запроса cas / accessToken в CAS5. Запрос не выполняется при поиске в профиле Pac4j. Доступ к профилю осуществляется либо через объект запроса, либо через объект сеанса. Для предыдущего вызова 'cas / authorize' поиск через сеанс завершился успешно, но для 'cas / accessToken' сеанс не содержит профиля, поскольку запрос исходит от бэкэнда сервера UAA, а не из браузера пользователя.

Это ошибка поддержки OIDC в ​​CAS5? Как мне добиться успеха при поиске в профиле Pac4j?

Вот трассировка стека, где поиск профиля в CAS5 не выполняется: ProfileManager<U>.retrieveAll(boolean) line: 69 ProfileManager<U>.get(boolean) line: 35 OAuth20AuthorizeEndpointController.isRequestAuthenticated(ProfileManager,J2EContext) line: 142 OidcAuthorizeEndpointController(OAuth20AuthorizeEndpointController).handleRequest(HttpServletRequest, HttpServletResponse) line: 109 OidcAuthorizeEndpointController.handleRequest(HttpServletRequest,HttpServletResponse) line: 86

@MisaghMoayyed есть какие-нибудь мысли? Заранее спасибо.

Ryan R. 09.03.2018 21:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
98
1

Ответы 1

Я использую 5.1.0, а не 5.2.2. Примерно в это время я откатился до 5.1.0.

Проблема все еще существует в коде 5.1.0. Я решил, изменив OidcIdTokenGeneratorService, чтобы вытащить CLAIM_PREFERRED_USERNAME из TGT:

if (!claims.hasClaim(OidcConstants.CLAIM_PREFERRED_USERNAME)) {
    String username = accessTokenId.getGrantingTicket().getAuthentication().getCredentials().get(0).getId();
    claims.setClaim(OidcConstants.CLAIM_PREFERRED_USERNAME, username);
}

против

if (!claims.hasClaim(OidcConstants.CLAIM_PREFERRED_USERNAME)) {
    claims.setClaim(OidcConstants.CLAIM_PREFERRED_USERNAME, profile.getId());
}

Были и другие вызовы восходящего потока в OAuth20AccessTokenEndpointController для получения CLIENT_ID через pac4j. CLIENT_ID также доступен как параметр запроса. Изменены звонки, похожие на:

final String clientId = uProfile.getId();

к

final String clientId = request.getParameter(OAuth20Constants.CLIENT_ID);

Другие вопросы по теме