делегированная аутентификация cas: динамический идентификатор клиента и секрет в cas pac4j

У меня конфигурация cas, как показано ниже

cas.authn.pac4j.typed-id-used=true
cas.authn.pac4j.oauth2[0].principal-attribute-id=preferred_username
cas.authn.pac4j.oauth2[0].id=xxxxxxxxxxxxxx
cas.authn.pac4j.oauth2[0].secret=xxxxxxxxxx
cas.authn.pac4j.oauth2[0].client-name=salesforce
cas.authn.pac4j.oauth2[0].auth-url=https://login.salesforce.com/services/oauth2/authorize
cas.authn.pac4j.oauth2[0].token-url=https://login.salesforce.com/services/oauth2/token
cas.authn.pac4j.oauth2[0].profile-url=https://login.salesforce.com/services/oauth2/userinfo
cas.authn.pac4j.oauth2[0].use-path-based-callback-url=false
cas.authn.pac4j.oauth2[0].profile-attrs.preferred_username=preferred_username

На странице входа мне нужно получить идентификатор электронной почты пользователя и на основе идентификатора электронной почты получить идентификатор и секрет клиента из базы данных, а затем использовать в URL-адресе перенаправления.

Возможно ли этого добиться?

1 ответ

Мне нужно получить идентификатор электронной почты пользователя и на основе идентификатора электронной почты получить идентификатор и секрет клиента из базы данных, а затем использовать в URL-адресе перенаправления.

В CAS нет способа изменить URL-адрес перенаправления для делегированной аутентификации. URL-адреса перенаправления создаются и вычисляются с помощью pac4j автоматически, и нет никакого нестандартного способа динамически управлять этим URL-адресом.

Чтобы приспособиться к этому, вы не можете полагаться на то, что CAS автоматически создаст для вас клиентов pac4j. Вместо этого вам нужно создавать свои собственные клиенты pac4j вручную. Это означает:

  • Вам нужно будет разработать класс конфигурации Spring
  • Вам нужно будет создать и внедрить своего собственного клиента в CAS.
  • Вам нужно будет изменить свой недавно созданный клиент с помощью специальной реализации RedirectionActionBuilder. Каждый клиентский объект имеет доступ кRedirectionActionBuilderкоторый знает, как создавать URL-адреса перенаправления. Вам нужно будет написать свой собственный, чтобы внести изменения в URL-адрес перенаправления.

CAS в конечном итоге выполнит этот код, чтобы перенаправление произошло:

final View result;
final RedirectAction action = client.getRedirectAction(webContext);
if (RedirectAction.RedirectType.SUCCESS.equals(action.getType())) {
    result = new DynamicHtmlView(action.getContent());
} else {
    final URIBuilder builder = new URIBuilder(action.getLocation());
    final String url = builder.toString();
    LOGGER.debug("Redirecting client [{}] to [{}] based on identifier [{}]", client.getName(), url, ticket.getId());
    result = new RedirectView(url);
}

Ключевым направлением является client.getRedirectAction(webContext);, в котором используется действие перенаправления, и если ваш клиент использует вашу собственную реализацию этой концепции, то именно он будет определять конечный URL.

Кроме того, вы можете изменитьDelegatedClientNavigationController.java в вашем наложении и манипулируйте URL-адресом (и приведенным выше кодом) по своему усмотрению.

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