делегированная аутентификация 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-адресом (и приведенным выше кодом) по своему усмотрению.