assertion validation processor(登录那点事)

2024-07-11 23:07:06 4

assertion validation processor(登录那点事)

这篇文章给大家聊聊关于assertion validation processor,以及登录那点事对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

登录那点事

client:提供用户名和密码或者是其他的认证凭证 server:验证client提供的认证凭证,记录登录状态 过程:访问系统时,client必须输入用户名和密码,server进行验证,验证通过后server建立一个叫做session的东西,然后把sessionId通过cookie发送给浏览器,下次登录的时候会带着cookie一起发过来,server从cookie中拿到sessionId就知道已经登录啦。  cookie和session的作用就是保持client和server的交互状态,这样一来可以将无状态的通信转化成有状态的交互,也就是让server有了“记忆”能力。现在有三个服务,需要输入三次用户信息,但是如果有成百上千的服务呢?HOW???参考上面简单登录的原理:服务端如何有了“记忆”能力呢:在client和server之间引入了一个中间层(cookie或者是session)。(题外话:计算机世界的99%的问题都可以通过一个引入一个中间层来解决) 所有我们可以想到一个可行的解决方案:对这个“中间层”做共享。 比如说先登录了A,就有了一个cookie,然后在用cookie去登录其他的系统。但是这样明显是有问题的: 1,cookie不能跨域,比如说a.com产生的cookie是不能传递给b.com的 2,就算cookie可以传递,但是其他系统并没有session来校验这个cookie。 解决方案: 1.cookie做共享可以挂到同一个一级域名下,比如A叫a.corp.com,B叫b.corp.com,C叫c.corp.com,这样cookie不就能共享了嘛 2,将session也做共享,从内存里面拿出来,放入一个大家都能访问的中间层里面,比如说redis。(题外话:又是中间层) 像下面这样:可以解决多系统登录的问题么?可以解决!!! 但是 1,要共享cookie就必须让所有的系统都在同一个域名下 2,多用户账号的存在。比如张三登录了A,然后去登录B,通过这种方式的话B需要去校验张三这个用户的合法性,此张三可能未必是彼张三!各个业务系统必须自己去维护自己系统的用户,而且用户信息还不止一个。 HOW???? Single Sign One :单点登录 消除多用户信息的问题,不用各个业务系统自己去维护用户信息,建立一个统一的用户认证中心(中间层:又是我哈哈哈),所有用户的认证工作都交给这个认证中心来完成。各个子业务只需要负责实现自己的业务即可,不在需要关心用户、认证等细节。 大致流程如下: 用户第一次访问A系统:www.a.corp.com,这个时候如果A发现用户没有登录的话,那他需要做的一项操作就是重定向认证中心:www.sso.com/login?redirect=www.a.corp.com。 其中www.sso.com/login就是认证中心的登录地址,redirect=www.a.corp.com就是登录完成后需要跳转到的地址。在认证中心登录之后认证中心会做以下几件事情: 1,建立一个session 2,发放ticket 3,重定向到你的地址,并在浏览器种下cookie信息。注意这个cookie是认证中心服务器的cookie哦。如:ssoid=1,domain=sso.com需要注意的有两点: 1,进行了两次重定向。第一次是重定向到SSO的服务器,第二次是重定向我们的后端服务器。 2,流程完成后再浏览器种了两个cookie,一个是sso服务器的cookie,一个是子系统A的cookie。接下来我们访问B系统: 这个时候会有三个cookie: 1,认证中心的cookie    domain:   sso.com   2,A系统的cookie    domain: a.corp.com 3, B系统的cookie     domain: b.corp.com 本质上就是保存了一个认证中心的cookie和多个子系统的cookie。一般我们称SSO的cookie的对应的会话成为全局会话,各自子系统cookie对应的会话称为局部会话。 概述 CAS(Central Authentication Service) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO)。 CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目。 特性 1、  开源的、多协议的 SSO 解决方案;Protocols:Custom Protocol、CAS、OAuth、OpenID、RESTful API、SAML1.1、SAML2.0 等。 2、  支持多种认证机制:Active Directory、JAAS、JDBC、LDAP、X.509 Certificates 等; 3、  安全策略:使用票据(Ticket)来实现支持的认证协议; 4、  支持授权:可以决定哪些服务可以请求和验证服务票据(Service Ticket); 5、  提供高可用性:通过把认证过的状态数据存储在 TicketRegistry 组件中,这些组件有很多支持分布式环境的实现,如:BerkleyDB、Default 、EhcacheTicketRegistry、JDBCTicketRegistry、JBOSS TreeCache、JpaTicketRegistry、MemcacheTicketRegistry 等; 6、  支持多种客户端: Java、 .Net、 PHP、 Perl、 Apache, uPortal 等。 体系结构  从结构上看,CAS 包含两个部分:CAS Server 和 CAS Client,CAS 需要独立部署,主要负责对用户的认证工作,CAS Server 会处理用户名 / 密码等凭证 (Credentials)。 负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。CAS Client一般与 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。过滤从客户端过来的每一个 Web 请求,同时, CAS Client 会分析 HTTP 请求中是否包请求 Service Ticket 术语  Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在server端 Ticket-granting cookie (TGC) :其实就是一个cookie,存放用户身份信息,由server发给client端 Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于server发给client一张票,然后client拿着这是个票再来找server验证,看看是不是server签发的。就像是我给了你一张我的照片,然后你拿照片再来问我,这个照片是不是你。。。没错,就是这么无聊。 安全性TGC安全性: 对于一个 CAS 用户来说,最重要是要保护它的 TGC,如果 TGC 不慎被 CAS Server 以外的实体获得,Hacker 能够找到该 TGC,然后冒充 CAS 用户访问所有授权资源。从基础模式可以看出, TGC 是 CAS Server 通过 SSL 方式发送给终端用户,因此,要截取 TGC 难度非常大,从而确保 CAS 的安全性。TGT 的存活周期默认为 120 分钟。 ST安全性: ST(Service Ticket)是通过 Http 传送的,因此网络中的其他人可以 Sniffer 到其他人的 Ticket。CAS 通过以下几方面来使 ST 变得更加安全: 1、  ST 只能使用一次 CAS 协议规定,无论 Service Ticket 验证是否成功, CAS Server 都会清除服务端缓存中的该 Ticket,从而可以确保一个 Service Ticket 不被使用两次。 2、  ST 在一段时间内失效 CAS 规定 ST 只能存活一定的时间,然后 CAS Server 会让它失效。默认有效时间为 5 分钟。 3、  ST 是基于随机数生成的 ST 必须足够随机,如果 ST 生成规则被猜出,Hacker 就等于绕过 CAS 认证,直接访问对应的服务。 流程上图是3个登录场景,分别为:第一次访问www.qiandu.com、第二次访问、以及登录状态下第一次访问mail.qiandu.com。 第一次访问www.qiandu.com ***隐藏网址*** 标号2: www.qiandu.com发现用户没有登录,则返回浏览器重定向地址。首先可以看到我们请求www.qiandu.com,之后浏览器返回状态码302,然后让浏览器重定向到cas.qiandu.com并且通过get的方式添加参数service,该参数目的是登录成功之后会要重定向回来,因此需要该参数。并且你会发现,其实server的值就是编码之后的我们请求www.qiandu.com的地址。 标号3: 浏览器接收到重定向之后发起重定向,请求cas.qiandu.com。 标号4: 认证中心cas.qiandu.com接收到登录请求,返回登陆页面。上图就是标号3的请求,以及标号4的响应。请求的URL是标号2返回的URL。之后认证中心就展示登录的页面,等待用户输入用户名密码。 标号5: 用户在cas.qiandu.com的login页面输入用户名密码,提交。 标号6 :服务器接收到用户名密码,则验证是否有效,验证逻辑可以使用cas-server提供现成的,也可以自己实现。上图就是标号5的请求,以及标号6的响应了。当cas.qiandu.com即csa-server认证通过之后,会返回给浏览器302,重定向的地址就是Referer中的service参数对应的值。后边并通过get的方式挟带了一个ticket令牌,这个ticket就是ST(数字3处)。同时会在Cookie中设置一个CASTGC,该cookie是网站cas.qiandu.com的cookie,只有访问这个网站才会携带这个cookie过去。 Cookie中的CASTGC:向cookie中添加该值的目的是当下次访问cas.qiandu.com时,浏览器将Cookie中的TGC携带到服务器,服务器根据这个TGC,查找与之对应的TGT。从而判断用户是否登录过了,是否需要展示登录页面。TGT与TGC的关系就像SESSION与Cookie中SESSIONID的关系。点击这里了解Java如何操作Cookie。 TGT:Ticket Granted Ticket(俗称大令牌,或者说票根,他可以签发ST) TGC:Ticket Granted Cookie(cookie中的value),存在Cookie中,根据他可以找到TGT。 ST:Service Ticket (小令牌),是TGT生成的,默认是用一次就生效了。也就是上面数字3处的ticket值。 标号7 :浏览器从cas.qiandu.com哪里拿到ticket之后,就根据指示重定向到www.qiandu.com,请求的url就是上面返回的url。***隐藏网址*** 标号9 :cas.qiandu.com接收到ticket之后,验证,验证通过返回结果告诉www.qiandu.com该ticket有效。 标号10 :www.qiandu.com接收到cas-server的返回,知道了用户合法,展示相关资源到用户浏览器上。第二次访问www.qiandu.com 标号11 :用户发起请求,访问www.qiandu.com。会经过cas-client,也就是过滤器,因为第一次访问成功之后www.qiandu.com中会在session中记录用户信息,因此这里直接就通过了,不用验证了。标号12 :用户通过权限验证,浏览器返回正常资源。访问mail.qiandu.com 标号13 :用户在www.qiandu.com正常上网,突然想访问mail.qiandu.com,于是发起访问mail.qiandu.com的请求。 标号14 :mail.qiandu.com接收到请求,发现第一次访问,于是给他一个重定向的地址,让他去找认证中心登录。上图可以看到,用户请求mail.qiandu.com,然后返回给他一个网址,状态302重定向,service参数就是回来的地址。 标号15 :浏览器根据14返回的地址,发起重定向,因为之前访问过一次了,因此这次会携带上次返回的Cookie:TGC到认证中心。 标号16 :认证中心收到请求,发现TGC对应了一个TGT,于是用TGT签发一个ST,并且返回给浏览器,让他重定向到mail.qiandu.com可以发现请求的时候是携带Cookie:CASTGC的,响应的就是一个地址加上TGT签发的ST也就是ticket。 标号17 :浏览器根据16返回的网址发起重定向。 标号18 :mail.qiandu.com获取ticket去认证中心验证是否有效。 标号19 :认证成功,返回在mail.qiandu.com的session中设置登录状态,下次就直接登录。 标号20 :认证成功之后就反正用想要访问的资源了。配置filter   我们需要在应用的web.xml文件中配置四个Filter,这四个Filter必须按照固定的顺序来进行配置,而且它们必须配置在应用的其它Filter之前。它们的先后顺序要求如下: 1、AuthenticationFilter casServerLoginUrl用来指定Cas Server登录地址,serverName或service用来指定认证成功后需要跳转地址。 2、TicketValidationFilter       请求通过AuthenticationFilter的认证之后,如果请求中携带了参数ticket则将会由TicketValidationFilter来对携带的ticket进行校验。 TicketValidationFilter只是对验证ticket的这一类Filter的统称,其并不对应Cas Client中的一个具体类型。Cas Client中有多种验证ticket的Filter, 都继承自AbstractTicketValidationFilter,它们的验证逻辑都是一致的,都有AbstractTicketValidationFilter实现,不同的是使用的TicketValidator不一样。这里我们使用Cas10TicketValidationFilter,也可以使用Cas20ProxyReceivingTicketValidationFilter或Saml11TicketValidationFilter。 3、HttpServletRequestWrapperFilter  HttpServletRequestWrapperFilter用于将每一个请求对应的HttpServletRequest封装为其内部定义的CasHttpServletRequestWrapper,该封装类将利用之前保存在Session或request中的Assertion对象重写HttpServletRequest的getUserPrincipal()、getRemoteUser()和isUserInRole()方法。       这样在我们的应用中就可以非常方便的从HttpServletRequest中获取到用户的相关信息 4、AssertionThreadLocalFilter AssertionThreadLocalFilter可以在应用的其它地方获取Assertion对象,找个过滤器会把Assertion对象存放到当前的线程变量中,我们在程序的任何地方都可以从线程变量中获取当前Assertion,就不需要再从Session或request中进行解析了。这个线程变量是由AssertionHolder持有的,我们在获取当前的        Assertion时也只需要通过AssertionHolder的getAssertion()方法获取即可

cas 单点登录问题

服务端返回的是实体对象的属性值,对象还是要在客户端创建的。可以修改cas的客户端代码 。下面的代码在验证成功后调用一个服务,然后将user实体对象放在session中public class Cas10TicketValidationFilter extends org.jasig.cas.client.validation.Cas10TicketValidationFilter { private String userMgrServiceEndpoint = ""; public static final String CONSTUSERINFO = "_const_cas_assertion_userinfo_"; @Override protected void initInternal(final FilterConfig filterConfig) throws ServletException { super.initInternal(filterConfig); this.userMgrServiceEndpoint = getPropertyFromInitParams(filterConfig, "UserMgrServiceEndpoint", ""); } @Override protected void onSuccessfulValidation(final HttpServletRequest request, final HttpServletResponse response, final Assertion assertion) { final HttpSession session = request.getSession(false); final User user = session != null ? (UserServiceStub.User) session.getAttribute(CONSTUSERINFO) : null; if (user == null) { if (!"".equals(this.userMgrServiceEndpoint)) { try { UserServiceStub us = new UserServiceStub(this.userMgrServiceEndpoint); String userid=assertion.getPrincipal().getName(); UserInfomationQuery uiq=new UserInfomationQuery(); uiq.setUserID(userid); UserInfomationQueryResponse ur=us.userInfomationQuery(uiq); User users=ur.get_return(); if(users.length!=0){ if(session!=null){ session.setAttribute(CONSTUSERINFO, users); } } } catch (Exception ex) { } } } }}

net.sf.jasperreports.engine.JRException如何解决

1、你把net.sf.jasperreports.engine.*这个包导入到这个工程中。

2、在你建的工程上单击右键,选配置-》Build Path-》将这个包加进来。

3、需要调用打印接口 JasperPrintManager类可以直接实现打印。

4、具体资料你可以参考Api我用的是printReport 方法。

5、主要就是先在服务器端生成JasperPrint对象,返回给客户端。

关于assertion validation processor,登录那点事的介绍到此结束,希望对大家有所帮助。

assertion validation processor(登录那点事)

本文编辑:admin

更多文章:


上线了小程序官网(新零售如何结合小程序新零售的小程序品牌策略怎么做)

上线了小程序官网(新零售如何结合小程序新零售的小程序品牌策略怎么做)

本文目录新零售如何结合小程序新零售的小程序品牌策略怎么做12315正式上线微信小程序,小程序要取代公众号了吗实体店做一个微信小程序和注册一个小程序有什么区别如何申请一个百度小程序运营新零售如何结合小程序新零售的小程序品牌策略怎么做与传统的门

2024年5月4日 08:20

501网页游戏(打不开网页 可上QQ 错误501/505TP-LINK Router R860用户名和密码  路由器 有问提呢 是我的浏览器的问提)

501网页游戏(打不开网页 可上QQ 错误501/505TP-LINK Router R860用户名和密码 路由器 有问提呢 是我的浏览器的问提)

本文目录打不开网页 可上QQ 错误501/505TP-LINK Router R860用户名和密码 路由器 有问提呢 是我的浏览器的问提电脑打不开网页,显示错误501是什麽原因妄想山海501区怎么进电脑网页出现404和501是什么情况 m

2024年7月21日 06:53

keenon(be keen on 和be keen to的区别 RT)

keenon(be keen on 和be keen to的区别 RT)

本文目录be keen on 和be keen to的区别 RTbe keen on 和be keen to 有什么区别RTlike;fond;favorite;keen on的具体区别be keen on什么意思I am keen on

2024年7月13日 16:19

it官网多久发货?52studyit官网怎么不能访问了

it官网多久发货?52studyit官网怎么不能访问了

本文目录it官网多久发货52studyit官网怎么不能访问了求国内外优秀的IT网站ithub官网访问流程,但是远程仓库总是连接失败,这是为什么Alviero Martini官方网址faceit官网打不开liberoffce生成excelan

2024年7月24日 15:34

的得地是什么用法和区别(的,地,得,的区别和用法是什么)

的得地是什么用法和区别(的,地,得,的区别和用法是什么)

其实的得地是什么用法和区别的问题并不复杂,但是又很多的朋友都不太了解的,地,得,的区别和用法是什么,因此呢,今天小编就来为大家分享的得地是什么用法和区别的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录的,地,得,

2024年8月21日 00:55

递归函数的作用(如何理解python中的递归函数)

递归函数的作用(如何理解python中的递归函数)

本文目录如何理解python中的递归函数C++中什么是递归函数,一般用在什么地方C语言,递归函数问题C语言中的递归函数有什么用途什么意义递归函数是什么意思如何理解python中的递归函数递归式方法可以被用于解决很多的计算机科学问题,因此它是

2024年7月5日 16:48

织梦岛偷东西教程(织梦岛小偷会叫多久)

织梦岛偷东西教程(织梦岛小偷会叫多久)

本文目录织梦岛小偷会叫多久织梦岛小偷怎么改回来织梦岛偷东西会不会影响结局塞尔达织梦岛偷东西影响结局吗织梦岛没办法在boss门前存档塞尔达织梦岛为什么马琳叫林克小偷gbc织梦岛dx无法保存织梦岛小偷会叫多久会一直叫。根据查询相关资料信息:偷东

2024年7月12日 10:57

web安全色所能够显示的颜色种类为(网页安全色介绍)

web安全色所能够显示的颜色种类为(网页安全色介绍)

这篇文章给大家聊聊关于web安全色所能够显示的颜色种类为,以及网页安全色介绍对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录网页安全色介绍网络安全色什么是web的RGB安全色网页的安全色怎么说Web安全色所能够显示的颜色种类为

2024年6月30日 21:04

jsp的form表单提交几种方式(在java中写jsp网页和servlet中,form表单的提交方法get与post的区别以及那个好啊)

jsp的form表单提交几种方式(在java中写jsp网页和servlet中,form表单的提交方法get与post的区别以及那个好啊)

各位老铁们,大家好,今天由我来为大家分享jsp的form表单提交几种方式,以及在java中写jsp网页和servlet中,form表单的提交方法get与post的区别以及那个好啊的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关

2024年7月23日 05:10

js array remove(js 怎么在数组删除第一个元素)

js array remove(js 怎么在数组删除第一个元素)

本文目录js 怎么在数组删除第一个元素js 删除数组中的字符js中如何清除一个Array中的值js数组删除某个元素js如何往数组Array中添加删除元素js 怎么在数组删除第一个元素【Array 对象方法】—————————————————

2024年7月6日 09:27

鼠标底部图片(我刚刚网购了一个razer的铜斑蛇 鼠标的下面怎么和图片的不一样 那个PC CE的 网上图片是左下角 我的是右下)

鼠标底部图片(我刚刚网购了一个razer的铜斑蛇 鼠标的下面怎么和图片的不一样 那个PC CE的 网上图片是左下角 我的是右下)

本文目录我刚刚网购了一个razer的铜斑蛇 鼠标的下面怎么和图片的不一样 那个PC CE的 网上图片是左下角 我的是右下鼠标下面四个支撑点上的东西是什么呀win7任务栏原来把鼠标放到下面的小图标上显示缩略图这个联想鼠标怎么拆开世界上第一只鼠

2024年6月26日 22:58

html文件发给别人能打开吗(为什么把HTML格式的文件发给别人别人看不了啊)

html文件发给别人能打开吗(为什么把HTML格式的文件发给别人别人看不了啊)

大家好,今天小编来为大家解答以下的问题,关于html文件发给别人能打开吗,为什么把HTML格式的文件发给别人别人看不了啊这个很多人还不知道,现在让我们一起来看看吧!本文目录为什么把HTML格式的文件发给别人别人看不了啊html文件对方能打开

2024年9月7日 16:55

淘宝css代码是什么(关于淘宝装修css代码)

淘宝css代码是什么(关于淘宝装修css代码)

本文目录关于淘宝装修css代码淘宝导航栏CSS代码:鼠标滑过一级分类自动弹出子二级子分类 代码是什么关于淘宝装修css代码1.店标大小:100*100px (图片必须放置在网络空间或网络像册,没有可以先申请一个,需支持宝淘外链的)格式:jp

2024年7月16日 21:20

bad的比较级和最高级(bad的比较级和最高级用英语怎么写)

bad的比较级和最高级(bad的比较级和最高级用英语怎么写)

本文目录bad的比较级和最高级用英语怎么写bad的比较级和最高级是什么faf、good、bad的比较级和最高级bad的比较级和最高级用英语怎么写大多数形容词(性质形容词)和副词有比较级和最高级的变化,即原级、比较级和最高级,用来表示事物的等

2024年1月16日 09:00

matlab中的param是什么意思?jsp中param是什么意思

matlab中的param是什么意思?jsp中param是什么意思

本文目录matlab中的param是什么意思jsp中param是什么意思matlab中的param是什么意思param是输入参数的集合。例如你给的程序里面,param就包含了很多个参数.param.DSOparam.nzparam.nypa

2024年7月1日 20:25

sublime安装教程(sublime text 2 中文怎么安装)

sublime安装教程(sublime text 2 中文怎么安装)

本文目录sublime text 2 中文怎么安装sublime text3使用教程sublime activate-power-mode-master包在win7怎么安装如何配置python环境下的sublimesublime text

2024年7月5日 05:46

efficient和effective的区别(effective和efficient的区别)

efficient和effective的区别(effective和efficient的区别)

本文目录effective和efficient的区别efficient和effective的区别efficient和effective区别effective与efficient的区别是什么,谢谢effective与efficient有什么区

2024年1月23日 00:00

scratch编程作品(scratch编程都有什么区别)

scratch编程作品(scratch编程都有什么区别)

本文目录scratch编程都有什么区别对于玩scratch作品的人会有什么好处scratch编程可以做哪些游戏scratch编程优秀的作品有哪些scratch编程什么意思scratch Desktop编程作品怎么打不开scratch编程都有

2024年5月18日 15:44

brazilian(brazilian是什么意思)

brazilian(brazilian是什么意思)

其实brazilian的问题并不复杂,但是又很多的朋友都不太了解brazilian是什么意思,因此呢,今天小编就来为大家分享brazilian的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录brazilian是什

2024年9月2日 04:15

together什么意思(together什么意思,怎么读)

together什么意思(together什么意思,怎么读)

本文目录together什么意思,怎么读together中文是什么意思together是什么意思together这个英语单词是什么意思together什么意思,怎么读together读法:英   意思:adv.在一起;同时;一致地;不间断地

2024年6月20日 12:52

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1731
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索