安全框架
文章平均质量分 94
cas, shiro,spring-security,oauth2,JSON Web Token
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
Spring Security OAuth2 单点登录
1. 概述在前面的文章中,我们学习了 Spring Security OAuth 的简单使用。《Spring Security OAuth2 入门》 《Spring Security OAuth2 存储器》今天我们来搞波“大”的,通过 Spring Security OAuth 实现一个单点登录的功能。可能会有女粉丝不太了解单点登录是什么?单点登录,英文是Single Sign On,简称为SSO,指的是当有多个系统需要登录时,用户只需要登录一个统一的登录系统,而无需在多个系统重复登录。..原创 2021-04-05 01:37:53 · 4002 阅读 · 0 评论 -
Spring Security OAuth2 存储器
1. 概述在《Spring Security OAuth2 入门》文章中,我们完成了Spring Security OAuth框架的学习。但是我们在文末中也提到,采用基于内存的InMemoryTokenStore,实现访问令牌和刷新令牌的存储。它会存在两个明显的缺点:重启授权服务器时,令牌信息会丢失,导致用户需要重新授权。 多个授权服务器时,令牌信息无法共享,导致用户一会授权成功,一会授权失败。因此,本文我们来学习 Spring Security OAuth 提供的其它存储器。TokenS...原创 2021-04-05 01:34:43 · 372 阅读 · 0 评论 -
Spring Security OAuth2 入门新
1. 概述在《Spring Boot 安全框架 Spring Security 入门》文章中,分享了如何使用 Spring Security 实现认证与授权的功能,获得广大女粉丝的好评。于是乎,艿艿准备再来分享一波Spring Security OAuth框架,看看在 Spring Security 如何实现 OAuth2.0 实现授权的功能。旁白君:实际上艿艿很早写了一篇关于 Spring Security OAuth 的文章,考虑到版本太老,提供的示例又过于简单,所以本文也是该文章的升..原创 2021-04-05 01:32:45 · 863 阅读 · 0 评论 -
从零开始的 Spring Security OAuth2(三)
@EnableResourceServer 与 @EnableAuthorizationServer还记得我们在第一节中就介绍过了 OAuth2 的两个核心概念,资源服务器与身份认证服务器。我们对两个注解进行配置的同时,到底触发了内部的什么相关配置呢?上一篇文章重点介绍的其实是与身份认证相关的流程,即如果获取 token,而本节要分析的携带 token 访问受限资源,自然便是与 @EnableResourceServer 相关的资源服务器配置了。我们注意到其相关配置类是 ResourceServ原创 2021-04-05 01:05:50 · 428 阅读 · 1 评论 -
从零开始的 Spring Security OAuth2(二)
准备工作首先开启 debug 信息: 123 logging: level: org.springframework: DEBUG 可以完整的看到内部的运转流程。client 模式稍微简单一些,使用 client 模式获取 tokenhttp://localhost:8080/oauth/token?client_id=client_1&client_secret=123456&scope=select&gr原创 2021-04-05 01:04:08 · 333 阅读 · 0 评论 -
从零开始的 Spring Security OAuth2(一)
前言今天来聊聊一个接口对接的场景,A 厂家有一套 HTTP 接口需要提供给 B 厂家使用,由于是外网环境,所以需要有一套安全机制保障,这个时候 oauth2 就可以作为一个方案。关于 oauth2,其实是一个规范,本文重点讲解 spring 对他进行的实现,如果你还不清楚授权服务器,资源服务器,认证授权等基础概念,可以移步理解 OAuth 2.0 - 阮一峰,这是一篇对于 oauth2 很好的科普文章。需要对 spring security 有一定的配置使用经验,用户认证这一块,spring .原创 2021-04-05 01:00:29 · 415 阅读 · 0 评论 -
GitHub OAuth 第三方登录示例教程
今天演示一个实例,如何通过 OAuth 获取 API 数据。很多网站登录时,允许使用第三方网站的身份,这称为"第三方登录"。下面就以 GitHub 为例,写一个最简单的应用,演示第三方登录。一、第三方登录的原理所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要 OAuth 授权。举例来说,A 网站允许 GitHub 登录,背后就是下面的流程。A 网站让用户跳转到 GitHub。原创 2021-04-05 00:46:12 · 192 阅读 · 0 评论 -
OAuth 2.0 的四种方式
介绍了 OAuth 2.0 是一种授权机制,主要用来颁发令牌(token)。本文接着介绍颁发令牌的实务操作。下面我假定,你已经理解了 OAuth 2.0 的含义和设计思想进入正文之前,插播一则活动消息。4月22日(周一)到4月29日(下周一),每天晚上八点都有两小时的免费直播课,体系化介绍高级前端开发知识,网易云课堂主办。详细介绍请看本文结尾,欢迎关注。RFC 6749OAuth 2.0 的标准是RFC 6749文件。该文件先解释了 OAuth 是什么。OAuth 引入..原创 2021-04-05 00:44:17 · 137 阅读 · 0 评论 -
单点登录原理与简单实现
一、单系统登录机制1、http无状态协议web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求;要鉴别浏览器请求,必须清楚浏览器请求状态。既然http协议无状态,那就让服原创 2021-03-21 04:04:31 · 269 阅读 · 0 评论 -
Shiro--缓存机制(十一)
Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实现Cache,但是对Cache进行了又抽象,方便更换不同的底层Cache实现。对于Cache的一些概念可以参考我的《Spring Cache抽象详解》:http://jinnianshilongnian.iteye.com/blog/2001040。Shiro提供的Cache接口:public interface Cache<K, V> { //根据Key获取缓存中的值 public V get(.原创 2020-08-01 01:23:48 · 489 阅读 · 0 评论 -
Shiro--会话管理(十)
Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对Web的透明支持、SSO单点登录的支持等特性。即直接使用Shiro的会话管理可以直接替换如Web容器的会话管理。会话所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在原创 2020-08-01 01:16:24 · 161 阅读 · 0 评论 -
Shiro--JSP标签(九)
Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登录用户显示相应的页面按钮。导入标签库<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>标签库定义在shiro-web.jar包下的META-INF/shiro.tld中定义。guest标签<shiro:guest>欢迎游客访问,<a href="${pageContext.request.contextP.原创 2020-08-01 00:58:18 · 110 阅读 · 0 评论 -
Shiro--拦截器机制(八)
8.1 拦截器介绍Shiro使用了与Servlet一样的Filter接口进行扩展;所以如果对Filter不熟悉可以参考《Servlet3.1规范》http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理。首先下图是Shiro拦截器的基础类图:1、NameableFilterNameableFilter给Filter起个名字,如果没有设置默认就是FilterName;还记得之前的如authc吗?当我们组装拦截器链时会根据这个名字找原创 2020-08-01 00:46:15 · 343 阅读 · 0 评论 -
Shiro--与Web集成(七)
Shiro提供了与Web集成的支持,其通过一个ShiroFilter入口来拦截需要安全控制的URL,然后进行相应的控制,ShiroFilter类似于如Strut2/SpringMVC这种web框架的前端控制器,其是安全控制的入口点,其负责读取配置(如ini配置文件),然后判断URL是否需要登录/权限等工作。7.1 准备环境1、创建webapp应用此处我们使用了jetty-maven-plugin和tomcat7-maven-plugin插件;这样可以直接使用“mvn jetty:run”或“m.原创 2020-08-01 00:30:47 · 108 阅读 · 0 评论 -
Shiro--Realm及相关对象(六)
6.1 Realm【2.5 Realm】及【3.5 Authorizer】部分都已经详细介绍过Realm了,接下来再来看一下一般真实环境下的Realm如何实现。1、定义实体及关系即用户-角色之间是多对多关系,角色-权限之间是多对多关系;且用户和权限之间通过角色建立关系;在系统中验证时通过权限验证,角色只是权限集合,即所谓的显示角色;其实权限应该对应到资源(如菜单、URL、页面按钮、Java方法等)中,即应该将权限字符串存储到资源实体中,但是目前为了简单化,直接提取一个权限表,【综合示例】部分原创 2020-07-31 23:58:58 · 152 阅读 · 0 评论 -
Shiro--编码/加密(五)
在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码。比如之前的600w csdn账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储。5.1 编码/解码Shiro提供了base64和16进制字符串编码/解码的API支持,方便一些编码解码操作。Shiro内部的一些数据的存储/表示都使用了base64和16进制字符串。String str = "hello";String base64Encoded = Base64.encodeToString(str.g.原创 2020-07-30 22:50:48 · 290 阅读 · 0 评论 -
Shiro--INI配置(四)
之前章节我们已经接触过一些INI配置规则了,如果大家使用过如Spring之类的IoC/DI容器的话,Shiro提供的INI配置也是非常类似的,即可以理解为是一个IoC/DI容器,但是区别在于它从一个根对象securityManager开始。4.1 根对象SecurityManager从之前的Shiro架构图可以看出,Shiro是从根对象SecurityManager进行身份验证和授权的;也就是所有操作都是自它开始的,这个对象是线程安全且真个应用只需要一个即可,因此Shiro提供了SecurityUt原创 2020-07-30 22:27:09 · 121 阅读 · 0 评论 -
Shiro--授权(三)
授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。主体主体,即访问应用的用户,在Shiro中使用Subject代表该用户。用户只有授权后才允许访问相应的资源。资源在应用中用户可以访问的任何东西,比如访问JSP页面、查看/编辑某些数据、访问某个业务方法、打印文本等等都是资源。用户只要授权后才能访问。权限安全策略中的原子授权原创 2020-07-30 07:19:59 · 183 阅读 · 0 评论 -
cas单点登录-服务管理cas-management部署(二十二)
本来这篇内容应该放到动态添加service之后讲的,决定放到最后,cas-management可以在线配置添加网站登录到cas服务器上,废话不说了,直接进入部署过程。参考官网https://apereo.github.io/cas/5.3.x/installation/Installing-ServicesMgmt-Webapp.html搭建过程pom.xmlpom是直接下载zip然后编译拷贝过来的。<?xml version="1.0" encoding="UTF-8"?&原创 2020-07-30 06:45:15 · 1913 阅读 · 3 评论 -
cas单点登录-分布式部署(二十一)
随着用户量的上升,单机的cas服务肯定是不行的,因此需要分布式来部署多台,要满足分布式部署,需要满足下面两个条件:1、采用统一的ticket存取策略,所有ticket的操作都从中央缓存redis中存取。2、采用session共享,tomcat的session的存取都从中央缓存redis中存取。(这一步可省略,我是将验证码放到了session中所以做session共享)第一步:redis存储ticket参考文档https://apereo.github.io/cas/5.3.x/install原创 2020-07-30 06:45:05 · 584 阅读 · 0 评论 -
cas单点登录-Cas Server开启Oauth2.0协议(二十)
学习Cas这么久了,一直在按照CAS自身的协议接入,Cas的强大在于有官方的插件,可以支持其他的协议,当然了,现在流行的Oauth2.0协议肯定是支持了,下面开始集成Oauth。参考博客https://apereo.github.io/cas/5.3.x/installation/OAuth-OpenId-Authentication.htmlhttps://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html#o原创 2020-07-30 06:44:55 · 1989 阅读 · 0 评论 -
cas单点登录-自定义返回信息给客户端(十九)
之前测试的时候,我们可以发现单点登录,默认是只返回登录的用户名,不会返回用户其他的信息,假如我们还需要用户的id,手机号之类的信息怎么办? 可以修改cas服务端,返回更多的信息给客户端。参考官网https://apereo.github.io/cas/development/integration/Attribute-Release-Policies.html1.首先要在注册Service的json中配置返回信息的规则比如:客户端A需要姓名和身份证号,客户端B需要昵称和头像这些公开信息,具体原创 2020-07-30 06:44:43 · 1242 阅读 · 0 评论 -
cas单点登录-自定义错误信息提示(十八)
上一篇,我们在登录页面添加了验证码,但是在测试的时候发现,无论是验证码错误,还是密码错误,都是提示的 认证信息无效。我们需要更改错误信息提示来增加用户体验。cas自定义错误信息需要以下几步:1.创建 一个异常类继承javax.security.auth.login.AccountExpiredException2.配置异常到application.properties中3.在messages_zh_CN.properties 配置文件中,配置异常弹出的消息使用maven的Overlay编译好之后,原创 2020-07-30 06:44:32 · 8688 阅读 · 2 评论 -
cas单点登录-重写Credential自定义表单信息(添加验证码)(十七)
本篇主要的知识点是为了讲解重写Credential来实现自定义表单信息,我们使用sso的时候往往登录不只是需要用户名密码,有时候可能还需要验证码,下面就要讲解如何重写Credential添加验证码。添加别的值也是一样的操作。验证码是有效防止暴力破解的一种手段,常用做法是在服务端产生一串随机字符串与当前用户会话关联(我们通常说的放入 Session),然后向终端用户展现一张经过“扰乱”的图片,只有当用户输入的内容与服务端产生的内容相同时才允许进行下一步操作.参考博客https://blog.csdn原创 2020-07-30 06:44:19 · 1802 阅读 · 1 评论 -
cas单点登录-配置记住我(十六)
正常情况下,在application.properties中配置开启记住我,在登录页面是会显示记住我的文本框,如下图:但是由于我们使用的是自定义登录页面,配置了记住我之后,页面上也没有显示该复选框,默认一直没有记住我,所以想要开启记住我,还需要将该文本框的代码粘贴到登录页。具体操作1.application.properties添加如下配置#记住我cas.ticket.tgt.rememberMe.enabled=truecas.ticket.tgt.rememberMe.timeToK原创 2020-07-30 06:44:06 · 644 阅读 · 1 评论 -
cas单点登录-自定义登出确认页面(十五)
上一篇我们自定义登录页面,登录页面和其他的页面更改方式有点不同,所以在上一篇中单独介绍过了,关于登出确认页面,也在之前的博客中有讲过,关于自定义登出确认页面,可以自己定义为自己的样式。关于页面的介绍这是最后一篇介绍,之后的都是同一个套路。具体操作首先找到casConfirmLogoutView.htmlcasConfirmLogoutView.html在templates的根目录下面,拷贝该页面,并粘贴到自己项目的相同路径下面,如下图:casConfirmLogoutView.html原创 2020-07-29 01:02:27 · 567 阅读 · 0 评论 -
cas单点登录-自定义登录页面(十四)
上有广告或者公司的logo等,下面开始进行自定义登录页面,查看官方文档,发现有动态主题和静态主题,下面只介绍静态主题模式。参考文档https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html#themeshttps://apereo.github.io/cas/5.3.x/installation/User-Interface-Customization-Themes.html主题主题意味着风格不一原创 2020-07-29 01:00:11 · 1123 阅读 · 0 评论 -
cas单点登录-动态添加services(十三)
前面我们整合客户端的时候,需要在cas服务端注册,使用的是json文件的方式,更简单的一点,直接配置为只要是http或者https的请求,都表示注册,那也就没有本篇的动态添加services了,哈哈 不过,这也是一个不错的方法。假如,我们以域名配置的,比如:http://app1.cas.com注册,那么又有新的模块为http://app2.cas.com我们总不能每次修改配置,重启cas服务吧。这很不现实,官网给出了如下的解决方式,将数据库来存储这些数据。具体参考官网https://ape...原创 2020-07-29 00:51:45 · 2241 阅读 · 0 评论 -
cas单点登录-rest认证(十二)
我们之前在cas服务端整合了shiro,在shirorealm中通过查询数据库获取用户信息和角色等信息,如果都是内部服务,将从数据库中获取信息改为通过调用接口获取信息就可以了,这也是一种方式,这里是演示一下官网的配置。什么是Rest认证?cas服务端通过调用其他服务接口,将用户名和密码传过去进行认证。这就是rest认证。什么情况下需要用到Rest认证?在不允许cas服务直接访问账号数据库的时候,这个时候就需要用到Rest认证。具体参考官网https://apereo.github.i原创 2020-07-29 00:42:56 · 1829 阅读 · 0 评论 -
cas单点登录-单点登出(十一)
既然有单点登录,肯定就要有登出,之前的整合都是只针对了登录,对登出并没有关注,今天我们就来讲讲登出。关于单点登出原理,参考博客:https://blog.csdn.net/u010588262/article/details/80201983https://blog.csdn.net/gdsgdh308227363/article/details/80446168参数说明参考官网地址https://apereo.github.io/cas/5.3.x/installation/Configu原创 2020-07-29 00:39:32 · 992 阅读 · 2 评论 -
cas单点登录-自定义鉴权路径(十)
客户端整合cas之后,无论我们访问什么地址,只要没有发现票据,都会跳转到cas服务端去进行登录。有时候我们有这样的需求,用户不登录也可以访问某些网页,这个时候就需要用到AuthenticationFilter的忽略地址功能。为了方便测试,我用一张图片来测试。如果只是简单的忽略地址,那很简单只要使用AuthenticationFilter的ignorePattern参数,具体操作如下:传统web项目配置方式1.配置资源映射我的图片放在WEB-INF/images下,默认是无法直接访问的,所以在s原创 2020-07-29 00:37:20 · 1854 阅读 · 0 评论 -
cas单点登录-编写自己的cas-starter(九)
前言写这篇文章的原因是在springBoot整合cas的过程中,我使用了一个别人写好的starter ,但是在整合单点登出的时候,发现多个客户端无法实现单点登出。经过查看源码,发现在这个starter中没有配置登出的filter。如果写成基于javaBean的配置也就一个类就能搞定,为了能学习一下如何实现一个 springboot的starter 所以来写一个 cas-client-spring-boot-starter。使用SpringBoot可以快速开发基于Spring框架的项目,SpringBo原创 2020-07-29 00:31:27 · 448 阅读 · 0 评论 -
cas单点登录-集成客户端-springboot方式(八)
之前整合了客户端的demo,也和spring整合了,现在的很多项目,都已经开始使用springboot了,spring传统方式是配置在web.xml中,Springboot和cas集成开发,主要也就是配置了四个过滤器,和一个监听器到Springboot中,其实和传统的配置方式,没有太大的区别。只是将web.xml配置都通过代码的配置改为基于javabean的配置。本次整合使用别人写好的一个starter。别人写好的第三方的starter,大家可以看一下源码,很简单,抽空我会写一篇 sprigboot自己实现原创 2020-07-29 00:23:56 · 440 阅读 · 0 评论 -
cas单点登录-集成客户端-传统spring方式(七)
上一篇博客,我们已经与客户端集成了,也实现了单点登录,一个系统登录之后,另一个系统无需再次登录,客户端是从官网下载的例子,一般我们的项目都是与spring集成的,那么本篇来整合spring,改造之前从官网下载的客户端。为了后面整合别的东西方便,这里直接将mybatis和springmvc整合进来。整合之后目录如下:整合了ssm,并且写了一个添加用户的功能,这些代码就不上了,看源码吧,只记录下面这些配置。整合过程1.客户端导入证书网上说必须保证客户端证书和服务端证书是同一个证书,不然就会原创 2020-07-29 00:19:19 · 294 阅读 · 0 评论 -
cas单点登录-集成客户端(六)
之前在服务端整合了数据库,也整合了shiro,我们一直是在服务端玩,登录跳转到登录成功页面,没啥意思,今天我们来将服务端和 客户端整合,使不同的客户端使用cas登录。cas服务端还是基于之前的整合shiro版本。环境概述ip 域名 对应服务 127.0.0.1 server.cas.com CAS服务器 127.0.0.1 app1.cas.com CAS客户端1 127.0.0.1 app2.cas.com CAS客户端2 配置域名原创 2020-07-29 00:14:04 · 590 阅读 · 0 评论 -
cas单点登录-服务端集成shiro权限认证(五)
所谓单点登录(SSO),只当企业用户同时访问多个不同(类型的)应用时,他们只需要提供自身的用户凭证信息(比如用户名/密码)一次,当用户在不同的应用间切换时,他们不用再重复地输入自身的用户凭证了。我的设计思路是SSO只做认证中心,各应用的授权在各自的服务做,比如 查看订单权限, 这个权限,它可能仅仅只是订单系统这个应用的权限。因此,授权应该在客户端做,本篇只是简单的介绍cas服务端与shiro 的集成, 只验证是否拥有角色,有角色就可以登录,没角色不可以登录。这里有两种方式第一种:一种是官网文档方式,原创 2020-07-28 23:59:16 · 1804 阅读 · 0 评论 -
cas单点登录-自定义登录验证(四)
我们在使用SSO单点登录的时候不只是验证一下用户名和密码是否一致,有时候还需要验证一些别的校验,那么这一张讲一下如何自定义验证器。自定义验证很重要,因为我们后续的很多功能,都是基于自定义验证。CAS服务器的org.apereo.cas.authentication.AuthenticationManager负责基于提供的凭证信息进行用户认证。与Spring Security很相似,实际的认证委托给了一个或多个实现了org.apereo.cas.authentication.AuthenticationHa原创 2020-07-28 23:57:03 · 2527 阅读 · 1 评论 -
cas单点登录-自定义密码认证(三)
参考官网https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties-Common.html#password-encodingCAS在身份验证处理,基本都是基于Spring Security对密码编码,如果您计划设计自己的密码编码器或编写脚本来执行此操作,则可能还需要确保覆盖在运行时具有以下模块:<dependency> <groupId>org.springframework原创 2020-07-28 23:53:56 · 1150 阅读 · 0 评论 -
Shiro--身份验证(二)
身份验证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。在shiro中,用户需要提供principals(身份)和credentials(证明)给shiro,从而应用能验证用户身份:principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/密码/手机号。credentials:证明/凭证.原创 2020-07-27 22:28:06 · 181 阅读 · 0 评论 -
Shiro--简介(一)
1.1 简介Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。本教程只介绍基本的Shiro使用,不会过多分析源码等,重在使用。Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaS..原创 2020-07-27 22:27:54 · 155 阅读 · 0 评论
分享