1

我的配置如下

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

在登录页面中,我需要获取用户电子邮件 ID,并根据电子邮件 ID 从数据库中获取客户端 ID 和机密,然后在重定向 URL 中使用。

有可能实现这一目标吗?

4

1 回答 1

0

我需要获取用户电子邮件 ID 并基于电子邮件 ID 从数据库中获取客户端 ID 和机密,然后在重定向 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(和上面的代码)。

于 2019-11-23T10:05:43.563 回答