CAS的service参数验证

这篇具有很好参考价值的文章主要介绍了CAS的service参数验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CAS登录成功后会跳转到service参数提供的url,目前系统中这个参数是没有任何验证的,service参数随便赋一个网址就可以。为安全起见现在对这个service要作一下限制,比如只能是同源url才可以重定向。

下面是基于CAS 3.5.2对系统的改造过程。

系统比较老旧,之前也作过CAS方面的改造,基本思路是从login-webflow.xml中找到切入点,查看源代码,然后在配置文件中把相关的bean替换掉。具体分析过程这里不再赘述。

在argumentExtractorsConfiguration.xml中有

 <util:list id="argumentExtractors">
    <ref bean="casArgumentExtractor" />
    <ref bean="samlArgumentExtractor" />
 </util:list>

把casArgumentExtractor替换成customArgumentExtractor。上面那个配置文件里再加上

<bean id="customArgumentExtractor"
   class="org.jasig.cas.web.support.CustomArgumentExtractor"
     p:httpClient-ref="noRedirectHttpClient"
     p:disableSingleSignOut="${slo.callbacks.disabled:false}" />

这个customArgumentExtractor就是要自己新写的。代码很简单,里面只有一个方法

public final class CustomArgumentExtractor extends AbstractSingleSignOutEnabledArgumentExtractor{

    public WebApplicationService extractServiceInternal(HttpServletRequest request) {
        return CustomWebApplicationServiceImpl.createServiceFrom(request,getHttpClientIfSingleSignOutEnabled());
    }
}

CustomWebApplicationServiceImpl也是要自己写的,基于cas-server-core-3.5.2.jar里的SimpleWebApplicationServiceImpl上修改。

在里面的createServiceFrom方法加上验证即可

    public static CustomWebApplicationServiceImpl createServiceFrom(
            final HttpServletRequest request, final HttpClient httpClient)  {
        final String targetService = request
                .getParameter(CONST_PARAM_TARGET_SERVICE);
        final String method = request.getParameter(CONST_PARAM_METHOD);
        final String serviceToUse = StringUtils.hasText(targetService)
                ? targetService : request.getParameter(CONST_PARAM_SERVICE);

        if (!StringUtils.hasText(serviceToUse)) {
            return null;
        }

        //新加的service同host验证---------------
        try {
            URI url = new URI(serviceToUse);
            if (!host.equals(url.getHost())){ 
                return null;
            }
        } catch (URISyntaxException e) {
            return null;
        }
        //---------------验证结束

        final String id = cleanupUrl(serviceToUse);
        final String artifactId = request.getParameter(CONST_PARAM_TICKET);

        return new CustomWebApplicationServiceImpl(id, serviceToUse,
                artifactId, "POST".equals(method) ? Response.ResponseType.POST
                : Response.ResponseType.REDIRECT, httpClient);
    }

上面的host是配置文件里读的当前系统的域名。这里可以加自己的其他验证逻辑,比如二级子目录、通配符域名或者白名单列表。

 文章来源地址https://www.toymoban.com/news/detail-422538.html

最后还要修改一个地方,在uniqueIdGenerators.xml里

    <util:map id="uniqueIdGeneratorsMap">
        <entry
            key="org.jasig.cas.authentication.principal.SimpleWebApplicationServiceImpl"
            value-ref="serviceTicketUniqueIdGenerator" />
        <entry
            key="org.jasig.cas.support.openid.authentication.principal.OpenIdService"
            value-ref="serviceTicketUniqueIdGenerator" />
......

把SimpleWebApplicationServiceImpl换成CustomWebApplicationServiceImpl。

 

这样修改之后,当service参数的url跟你配置的域名不一致时,等同于service为null,即未配置。在我的系统里会跳转到一个只是简单提示登录成功的jsp页面。

 

到了这里,关于CAS的service参数验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决在命令行中输入py有效,输入python无效,输入python会跳转到microsoft store的问题| Bug

    打开 运行,输入cmd,在命令行中输入 where python 。 这里的 lihua 就是你自己的账户名。 如果看到了这个 windows apps 路径,且在你的python安装路径之前,那你大概率就是这个问题了。 因为 windows apps 路径高于你的自定义安装路径,会直接走微软应用商店的路径要你在应用商店下

    2024年04月28日
    浏览(32)
  • JavaEE 课堂案例: 简单实现登录功能: 1.前端用户自己输入账号密码, 点击登录 2.服务器端获得账号密码, 数据库查询 jar JdbcTemplate 3.登录成功 -> 跳转到首页

    1 首先导入jar包(看个人情况导入)     这里需要注意的是平时我们导入jar包是导入在自己的工程或者moudle下面的,在这里我们必须把jar包导入在WEB-INF中(详情可看图),从图中可看出,一个工程在编译过后,只有src下的数据会编译到WEB-INF下的classes目录中,所以需要将静态

    2024年02月03日
    浏览(36)
  • 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示R登录成功“,提供一个Ok按钮,用户点击OK后,关闭登录界面,跳转到其他界面,

    如果账号和密码不匹配,弹出错误对话框,给出信息\\\"账号和密码不匹配,是否重新登录\\\",并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面如果用户点击取消按钮,则弹出一个问题对话框,给出信息

    2024年04月10日
    浏览(47)
  • [已成功破解] 阿里 taobao 滑条验证码 x5sec解密 slidedata参数

    [已破解] 阿里 taobao 滑条验证码 x5sec解密 slidedata参数 今天在爬tb数据的时候 发现老是会触发一个滑块验证 只要过了这个滑块将滑块返回的x5secdata 的cookie 带到请求参数里面去 就能完美避开了 然后去抓了下滑块的包 过了这个滑块拿到cookie就能 访问阿里一直获取数据了 目前

    2024年02月11日
    浏览(30)
  • 【CAS6.6源码解析】源码构建时-默认service配置不生效解决方案

    CAS6的源码提供了默认的HTTPSandIMAPS-10000001.json配置用于授权所有的https和imaps服务,但是当添加JsonServiceRegistry模块启动后,会发现service是没有被注册的,是由于json路径引起的错误,可以把路径修改为绝对路径以解决此问题。 CAS默认采用json的方式去文件中读取服务的定义从而注

    2024年02月15日
    浏览(44)
  • cas单点登录-服务端部署

    一.需求描述 公司开发系统越来越多,每个系统都有自己的登录认证流程,给用户很繁琐的体验,统一认证单点登录迫在眉睫 二.流程图 三.本地运行cas服务端 1.拉取cas服务端代码,切换到对应分支(我使用的是6.4.x) https://github.com/apereo/cas-overlay-template  2.由于6.4版本默认jdk

    2024年02月08日
    浏览(70)
  • 单点登录:CAS使用springboot main方法启动cas-server

    1.下载demo 2.使用eclipse导入maven项目。此次我是用的spring tool suite 4导入的。 导入时会用较长时间,10分钟吧。需要下载很多资源。 3.报错,提示缺少jar包 4.其他地方下载该jar包。我是在cas-server-webapp-tomcat-5.3.9.war中解压中找到xmlsectool-2.0.0.jar。 5.安装jar。 6.更新项目。 pom.xml右键

    2024年02月09日
    浏览(49)
  • 若依微服务集成CAS,实现单点登录

    若依(RuoYi)微服务是一款基于Spring Cloud Alibaba开发的企业级微服务框架,采用前后端分离方式,使用了常用的微服务组件,如Feign、Nacos、Sentinel、Seata等,提供了丰富的微服务治理功能,如服务注册、发现、路由、负载均衡、熔断降级、限流等。借助若依微服务框架可以让我

    2024年02月12日
    浏览(35)
  • 多系统使用CAS实现SSO登录案例

    实现SSO有很多种方案,比较简单且可行的一般都是如上两种再加上CAS,一般企业内部多个系统之间如果想实现SSO,比较推荐的方式就是今天要介绍的CAS,Central Authentication Service,中央身份认证服务。 CAS方案主要包含如下两个部分: CAS Server,作为认证服务的中心,需要单独部

    2024年02月15日
    浏览(35)
  • SpringBoot 实现CAS Server统一登录认证

    ​ CAS(Central Authentication Service)中心授权服务,是一个开源项目,目的在于为Web应用系统提供一种可靠的单点登录。 ​ 在整个认证的流程中的整个流程大概是:首先由CAS Client(我们的客户端应用)发起请求,CAS Client 会重定向到CAS Server进行登录,CAS Server进行账户校验且多

    2024年01月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包