Я пытаюсь настроить 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




Я использую 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);
@MisaghMoayyed есть какие-нибудь мысли? Заранее спасибо.