关于 Authorization: Basic 灵异事件

这几天在研究 spring Security oauth 等相关的框架
参照例子进行配置,代码不描述,总之产生了下面的地址 

有2个地址,分别使用以下方式登录:
1: /app/oauth/token  -> basic
2: /app/hi           -> form


总共两种认证方式,分别是 basic,form
两种认证分开认证不同的账号体系,也不会公用(basic认证之后还是会form,反之一样)
实现效果没问题,都符合预期,如果只是到这一步结束的话。

----------------------------------------

这个时候我手贱加了一个新地址(与2使用同一个认证):

3: /app/oauth/hi     -> form

出现问题:
    当按照 1,2,3 的顺序去访问时,3将会被重新导航到登录页面,也就是说2的认证session丢失了
    但按照 1,3(2),2 的顺序时,却不会导航到登录页面

丢失原因:
    这个问题困扰我很久,花了很长时间各种去调试,检查了配置等等。 
    2,3 确实是使用的同一个认证链。没有问题
    最终发现,因为 3 的地址请求header中带了: Authorization: Basic。
    而我security采用的是默认配置,会进入到 BasicAuthenticationFilter ,导致认证失败,清空了session

到这一步也算差不多找到了问题原因,在使用form的认证链配置中关掉basic即可
    
-----------------------------------------

一个新问题:
    为什么 2,3 同一个系统的地址,一个会带上 Authorization: Basic,一个又不会?

最后:
    最终的问题原因,重现都已经通过例子进行了验证
    通常对于cookie浏览器都是使用ip,域名来进行存储分离,比如session
    比如: 我如果在  localhost 下存储了一个 sessionId=1的数据,在下面的地址都可以拿到
        1: localhost/app/oauth/token  
        2: localhost/app/hi           
        3: localhost/app/oauth/hi     
    而下面的地址拿不到,这就是所谓的跨域问题了。
        1: 127.0.0.1/app/oauth/token  
        2: 127.0.0.1/app/hi           
        3: 127.0.0.1/app/oauth/hi  
    
    但是 Authorization: Basic 好像跟这个不一样,它有一个"上下文"的概念,也就是context-path。但又有一些差别
    比如:下面几个地址,一般认为的上下文
        1. localhost/app/oauth/token   -> app
        2. localhost/app/oauth/b/token   -> app
        3. localhost/app/hi            -> app
        4. localhost/app/b/hi            -> app
        5. localhost/app2/oauth/token  -> app2
        6. localhost/app2/oauth/b/hi     -> app2
    但是 Authorization: Basic 却认为:
        1. localhost/app/oauth/token   -> app/oauth
        2. localhost/app/oauth/b/token   -> app/oauth/b
        3. localhost/app/hi            -> app
        4. localhost/app/b/hi            -> app/b
        5. localhost/app2/oauth/token  -> app2/oauth
        6. localhost/app2/oauth/b/hi     -> app2/oauth/b
    你的请求路径必须要是认证路径的子路径
    比如: 
        通过 1 进行了认证,请求 2,3 都会带上认证信息,但请求 4 就不会
        
    最后,虽然苦逼的弄清楚了这个问题,但相关文档却找不到
    
    这个问题分享出来,希望能给跟我一样被这个问题困扰的同学一些帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值