一、初步认识buji-pac4j
公司单点登录cas客户端用的是shiro的shiro-cas模块,但从源码看来,shiro不建议再使用shiro-cas,也就是说shiro-cas模块的相关都被shiro标注为@Deprecated,并推荐使用的代替方案是buji-pac4j(https://github.com/bujiio/buji-pac4j)。
那么什么是buji-pac4j呢?原文档如是说:
The buji-pac4j project is an easy and powerful security library for Shiro web applications which supports authentication and authorization, but also advanced features like CSRF protection. It’s based on Java 8, Shiro 1.4 and on the pac4j security engine v2. It’s available under the Apache 2 license.
简单来说,buji-pac4j是基于java8、shiro、pac4j 2.x安全引擎的提供了认证、授权和跨站点伪造请求防范的功能强大的安全库。
二、几个重要的概念和组件
1、client:一个client代表了一个认证机制,在其上面进行登录认证流程并返回用户的信息,分为两种:
a.间接客户端(Indirect Client) : 通过登录认证界面进行登录的客户端,例如CAS;
b.直接客户端(Direct Client):web 服务认证。可以理解为跟间接客户端相反的一种情况,就是涉及到的交互不需要用户参与的,也就是一些对用户来说是透明的交互。例如微信登录、facebook登录等。
c.buji-pac4j支持以下协议:
OAuth - SAML - CAS - OpenID Connect - HTTP - OpenID - Google App Engine - Kerberos (SPNEGO)
2、authorizer :鉴权认证器。也就是对当前认证通过后的用户进行授权认证,如果当前操作人没有经过登录认证的话authorizer 也派不上用场,因为认证都通过不了,谈何授权?
3、SecurityFilter:安全过滤器。当请求一个受保护的url时,安全过滤器会根据clients和authorizer判断当前用户是否已经认证通过并且校验是否有权限访问此url。如果没有经过认证的用户,此过滤器会帮用户执行认证操作(Direct Client的情况下),或者呈现登录界面给用户登录(Indirect Client的情况下)。而且这个过滤器默认还提供了跨域访问控制、防御XSS攻击等功能,只要配置一下即可实现简单的权限控制。
4、CallbackFilter:完成登录认证的回调过滤器。例如CAS的ST校验就是这里完成。
三、主要流程
1、组件间的联系
几个组件之间关系如下图:
如图,SecurityFilter关联了鉴权器Authorizer,SecurityFilter和CallbackFilter跟Client是组合关系,也就是这两个过滤器一定要包含至少一个client(例如CasClient),Filter会根据不同的client实现不同的认证逻辑。需要注意的是,图中组件的关系在实际中是比较复杂的,上图是简化版的关系图。
2、组件间的协作
a、当用户请求一个受保护的链接(protectedUrl),经过SecurityFilter会判断当前用户是否已经认证,如果已经认证并且鉴权成功,则向用户展示protectedUrl;否则通过Client(如CasClient)向CAS发起认证请求,并展示登录页面给用户登录。
b、用户输入用户名密码提交到CasServer,认证成功后CasServer会发ST到CallbackFilter进行校验,校验成功后重定向到protectedUrl。
c、当重定向protectedUrl时,此时已经拿到了用户的信息,接下来就需要Authorizer进行鉴权,授权成功后,向用户展示受保护的资源。
下图是简化了的认证流程:
注:图中省略了Cas认证的复杂过程
四、替换Shiro-Cas
1、shiro-cas 和 buji-pac4j的实现方式非常相似,后者要用到两个库:buji-pac4j和pac4j-cas。
2、原来的CasFilter被替换成CallbackFilter ,两者功能上是几乎是一样的,都是实现身份认证的回调,但CallbackFilter不只是针对CAS,可以灵活的实现其他不同的client回调。
3、CasRealm被替换成Pac4jRealm,CasSubjectFactory被替换成Pac4jsubjectFactory。
4、最后,当一个url需要被保护时(需要经过认证、鉴权),不仅需要使用shiro默认的过滤器,而且必须使用SecurityFilter。
关于buji-pac4j具体怎么使用,在后面的文章中会详细介绍(请戳这里)。这里只对其进行简单描述,有了个宏观的认识,细节的处理会简单很多。
若发现本文有不当之处,请高手们批评指出,谢谢!

本文介绍了buji-pac4j作为Shiro-CAS的替代方案,它是一个基于Java 8、Shiro 1.4和pac4j的安全库,提供认证、授权和CSRF保护。buji-pac4j支持多种认证协议,如CAS、OAuth、SAML等。文章阐述了client、authorizer和SecurityFilter等核心概念,以及它们在认证流程中的作用,帮助读者理解buji-pac4j的主要工作原理和流程。
1万+

被折叠的 条评论
为什么被折叠?



