美文网首页
shiro restful 无状态鉴权

shiro restful 无状态鉴权

作者: bigpeng个人博客 | 来源:发表于2018-06-06 10:17 被阅读140次

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

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

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

    3.2 需要解决的问题

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

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

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

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

    相关文章

      网友评论

          本文标题:shiro restful 无状态鉴权

          本文链接:https://www.haomeiwen.com/subject/xygvsftx.html