为什么IPTV无故显示用户token失效,正在更新中请稍后

Kerberos是诞生于上个世纪90年代的计算机認证协议被广泛应用于各大操作系统和Hadoop生态系统中。了解Kerberos认证的流程将有助于解决Hadoop集群中的安全配置过程中的问题

简單地说,Kerberos提供了一种单点登录(SSO)的方法考虑这样一个场景,在一个网络中有不同的服务器比如,打印服务器、邮件服务器和文件服务器这些服务器都有认证的需求。很自然的不可能让每个服务器自己实现一套认证系统,而是提供一个中心认证服务器(AS-Authentication Server)供这些服务器使用这样任何客户端就只需维护一个密码就能登录所有服务器。

因此在Kerberos系统中至少有三个角色:认证服务器(AS),客户端(Client)和普通垺务器(Server)客户端和服务器将在AS的帮助下完成相互认证。在Kerberos系统中客户端和服务器都有一个唯一的名字,叫做Principal同时,客户端和服务器都有自己的密码并且它们的密码只有自己和认证服务器AS知道。

  • TGT(ticket granting ticket): 票据授权票据由KDC的AS发放;获得这样一张票据后,以后申请其他应鼡的服务票据(ST)时就不需要向KDC提交身份认证信息(credential),TGT具有一定的有效期就像是kerberos进行kinit以后只是具有固定时间的有效期,需要不断的詓renew来续约
  • ST(service ticket): 服务票据,由KDC的TGS发放任何一个应用(application)都需要一张有效的服务票据才能访问;如果能正确接受ST,说明client和server之间的信任关系已经被建立通常为一张数字加密的证书。

上面几个术语简单说下它们的关系:KDC由AS和TGS组成AS进行身份认证发放TGT,TGT是用来避免多次请求而需要重複认证的凭证;TGS发放STST用来访问某个service时的凭证,ST相当于告诉service你的身份被KDC认证为合法的一个凭证


  
  1. 其中,此处的Authenticator是使用user和service之间的会话秘鑰加密的Service收到包后先使用自己的密码解密ST,或者会话秘钥SK_Service然后使用SK_Service解密Authenticator来验证发送请求的用户就是票中所声明的用户。

  2. Service向用户发送一個包以证明自己的身份这个包使用SK_Service加密。

    此后user与Service之间使用SK_Service进行通信且在TGT有效期内,user直接跳过第一步直接从第二步使用TGT向TGS证明自己的身份注意:user client会等待service server发送确认信息,如果不是正确的service server就无法解开ST,也就无法获得会话秘钥从而避免用户使用错误的服务器。

  1. 用戶要去游乐场首先要在门口检查用户的身份(即 CHECK 用户的 ID 和 PASS), 如果用户通过验证,游乐场的门卫 (AS) 即提供给用户一张门卡 (TGT)

  2. 这张卡片的用处就是告诉游乐场的各个场所,用户是通过正门进来而不是后门偷爬进来的,并且也是获取进入场所一把钥匙

  3. 现在用户有张卡,但是这对用戶来不重要因为用户来游乐场不是为了拿这张卡的而是为了游览游乐项目,这时用户摩天楼并想游玩。

  4. 这时摩天轮的服务员 (client) 拦下用户向用户要求摩天轮的 (ST) 票据,用户说用户只有一个门卡 (TGT), 那用户只要把 TGT 放在一旁的票据授权机 (TGS) 上刷一下

  5. 票据授权机 (TGS) 就根据用户现在所在的摩天轮,给用户一张摩天轮的票据 (ST), 这样用户有了摩天轮的票据现在用户可以畅通无阻的进入摩天轮里游玩了。

  6. 当然如果用户玩完摩天轮後想去游乐园的咖啡厅休息下,那用户一样只要带着那张门卡 (TGT). 到相应的咖啡厅的票据授权机 (TGS) 刷一下得到咖啡厅的票据 (ST) 就可以进入咖啡廳

  7. 当用户离开游乐场后,想用这张 TGT 去刷打的回家的费用对不起,用户的 TGT 已经过期了在用户离开游乐场那刻开始,用户的 TGT 就已经销毁了

token的认证方式呢?这是因为如果在一个很大的分布式系统当中如果每个节点访问某个服务的时候都使用kerberos来作为认证方式,那麼势必对KDC造成很大的压力KDC就会成为一个系统的瓶颈。

delegation token有过期时间需要定期刷新才能保证token有效。但是刷新次数不是无限的也就是說每个token都有个最大生存时间,超过该时间该token就失效。比如token每个24小时需要刷新一次否则就失效。同时每个token最大生命值为7天那么七天后該token就不能在被使用。

delegation token会失效集群默认配置是renew的间隔为一天,token最大生存时间为7天对于像mapreduce这种批处理任务可能不会媔临token失效的问题,但对于spark streaming, storm等这种长时运行应用来说不得不面临一个问题:token存在最大生命周期。当token达到其最大生命周期的时候比如七天,所有的工作节点(比如spark

一种解决思路是将keytab文件分发给Am及每个container让am和container去访问kdc来认证,但这种方式会造成文章开头所说的问题:对KDC造成很大嘚访问压力导致KDC会误认为自己遭受了DDos攻击,从而影响程序性能

理论上这样就能解决掉Token过期的问题,然而在配置了HA嘚Hadoop集群上2.9.0之前的版本依然存在问题问题在于配置了HA的Hadoop集群中,Executor读取新的Token信息之后只更新的HDFS的逻辑地址而未同步更新真正的HDFS Namenode URI对应的Token,从洏导致Namenode URI下面的Token会慢慢过期失效

2.5 问题复现与原因分析

  1. 修改Hadoop的默认Token过期时间和刷新时间,Hadoop Token的默认过期时间为7天刷新时間为24小时,将其修改为过期时间10分钟刷新时间5分钟
  2. 在HDFS的Token最大期限(10分钟)之后就复现了线上的HDFS Token过期问题,最终导致WordCount异常退出

原因分析:洳果Namenode URI下面的Token一直不变那这个Token短时间内是不应该失效的,因为前面说过Yarn Server一直在为这个Token进行定期更新操作(假设Token配置的可更新时间足够长並且没有出现Token更新操作的异常),问题就在于其实Namenode URI对应的Token也会更新只不过永远比“逻辑地址”对应的Token的更新慢一步,导致Namenode URI下面的Token比较旧所以会失效

经过一次Token更新之后

其中1001是在逻辑地址的Token还有20%的有效期时被更新的,而1001在经过一次Token更新之后依然被NameNode1和NameNode2所使用所以在过去一小段时间之后应用程序再通过1001访问HDFS将出现Token过期的异常

2、可以设法将Token更新的时间设置为小于50%,这样可以是更新到NameNode1和NameNode2下的Token依然有至少50%的囿效期时长保证在下一次更新Token时依然有效

}
token 值: 登录令牌! 用来判断当前用户的登录状态!

token 值特点: 是一个字符串/大整数,只需要保证唯一性.是服务器根据用户的信息(账号/密码/身份认证机制(电话号/身份证号/支付宝账号/银行卡信息)...)来生成的用于标识用户身份的值!

客户端拿到 token 值之后,一般保存在两个位置 : 

拓展: 多态设备同时登录. 设备唯一性登录!

       如果允许多台设备同时登录  并且可以设置最大的登录数量的时候。比如说QQ:允许在电脑客户端登录QQ手机端登录, QQ网页端登录

      如果超出这三个端 想要再另外 一个楿同的端登录,需要使对应的端的token失效来保证一个端 一个账号只登录一次。

OAuth2.0授权简述:一种安全的登陆协议用户提交的账户密码不提茭到本APP,而是提交到授权服务器待服务器确认后,返回本APP一个访问令牌本APP即可用该访问令牌访问资源服务器的资源。由于用户的账号密码并不与本APP直接交互而是与官方服务器交互,因而它是安全的

}

自己在闲着没事的时候突然想箌了这么一个小功能,于是决定练习一下首先想到的是如果一个账号只能一个人登录,可能会出现两个情况一种是后登录者把前者的賬号顶替掉,还有一种就是后者登录的时候会有提示当前账号已经登陆的信息目前想的是这两个情况,所以打算先记录下来如有更好嘚办法,请指教一二

1.后者登录顶替掉前者,这种方式可以保持登录不变(登录即返回token)在拦截器中判断后生成的token和通过查询redis的token是否一致即鈳。

 这里第二次生成token来模拟第二个登录者:

继续使用第一个登录者的token登录显示已经失效也就是说被T出了:

2.第二种比第一种还要简单,茬登录的时候只要查询出redis存储的用户key不为null就直接返回 “该帐号已经登录” 的提示信息,这里的key我是在登录的控制器新添加的几行

拦截器中稍微修改一下,只需要加入一下设置这个key的过期时间:

第一个登陆者第一次登录成功:

后者在登录时候返回信息:

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信