shiro restful 无状态鉴权

1、 什么是无状态?
  一般web系统中的状态是指两个相互关联的用户交互操作保留某种公共信息,例如用户登录信息,工作流等。这些信息具有不同作用域,如page,request,session,application等。通常由服务器负责保存这些信息。
2、 为什么restful 需要无状态?
  无状态请求易于实现负载均衡。在分布式web系统下,有多个可用服务器,每个服务器都可以处理客户端请求。如果是有状态的话,则只能保存了用户状态的那台服务器能够响应,除非状态在服务器间是共享的。
  无状态请求有较强的容错性和可伸缩性。如果一台服务器宕机,无状态请求可以透明地交由另一台可用服务器来处理。  
  这些因素导致了一般restful接口采用无状态。
3、shiro怎么实现restful 无状态鉴权?

3.1 无状态鉴权的最基本的两点:

  • 无状态鉴权,每次请求都必须带入鉴权信息,以供服务器端验证。
  • 服务器端不保存请求的状态。

3.2 需要解决的问题

  • 无状态每次都传鉴权信息,如何防止信息挟持和重发攻击。

大致的解决思路:
1)客户端事先在服务器注册,产生客户端的用户名和密码,比如 admin,123456.
2)客户端每次请求都需要带上用户名,请求的数据通过密码做消息摘要,并将摘要一并传递到服务器。
3)服务器端根据用户名admin,查找其对应的密码,然后根据密码对请求数据做摘要(客户端与服务器端算法要一致),然后比对客户端传过来的摘要与服务器生成的摘要是否相同。相同则鉴权成功,不同则失败。

整个请求过程中,并没有涉及到密码的传递,相对来说可以防止信息挟持。
但是存在重发攻击的风险,别人仿照用户发起相同的请求,那么就会造成安全隐患。
解决方式
在客户端请求参数中加入唯一的随机数,服务器每次都会解析并保存该唯一随机数,当发现该唯一随机数存在时,则判定为重发攻击。

以上简述了大致的流程,接下来就是代码时刻。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • 本文目录:一、单体应用 VS 微服务二、微服务常见安全认证方案三、JWT介绍四、OAuth 2.0 介绍五、思考总...
    挨踢的懒猫阅读 18,088评论 5 29
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 12,730评论 6 152
  • 今天来说说事实与建议的重要性。富爸爸说当涉及到金钱时,你必须知道事实和建议之间的区别。 富爸爸举了很多生活中的例子...
    小小梨涡阅读 3,892评论 0 0
  • 我爱歌唱,更爱随风飘荡。 我无所诉求,只想找回昔日的小路 我身上的荣华富贵,失去了可以再得到。可我那份闲散的心,却...
    乃彻阅读 1,733评论 4 3

友情链接更多精彩内容