海康、大华等网络摄像头RTSP_Onvif网页无插件直播流媒体服务器EasyNVR鉴权出现跨域问题的解决方法

随着平安城市等项目的推进,视频监控行业正面临从传统人工监控向高清化、网络化、智能化转变的挑战。海量视频数据的处理对存储资源、实时性和检索效率提出了更高要求。文章探讨了跨域问题的解决方案,包括服务端主动写入token到cookie、统一设置允许跨域访问,以及客户端的跨域配置。

背景分析

随着平安城市、智慧城市、雪亮工程、智能交通等各项建设的持续开展,安防逐渐得到普及,面对如此广阔的市场,对安防企业来说不仅仅是机遇更多的是挑战。现今大多数摄像头一直没能摆脱人工监控的传统监控方式,由此导致了大量视频数据堆积占用存储资源、实时性差、检索困难等问题,海量摄像头带来的海量视频数据检索工作需要耗费大量警力。

​​​​​​​为了解决这些问题,近年来,视频监控行业发展方向主要为:“高清化、网络化、智能化”。视频监控设备技术性极强,系统的创新升级同时也在引导市场需求的变化并创造了新的市场需求。

EasyNVR鉴权引发跨域问题的研究

什么是跨域?

浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。

为什么会出现跨域问题

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

解决方法

1、服务端处理
1)登录成功, 服务端主动写 token 到 cookie

按照之前的接口设计, 登录成功, 服务端在 HTTP Response Body 中返回 token,由客户端自己负责将 token 写入 cookie. 在跨域场景中, 这样就行不通了,由于浏览器的限制, 客户端无法将 token 写到非子域名 cookie. 改为服务端主动写 token 到 cookie 就没有这个问题了. 服务端在 HTTP Response Header 中添加 Set-Cookie 字段, 写入 token=xxx

2)服务端统一做充许跨域访问设置
服务端配置充许跨域并且携带cookie, 需要在 HTTP Response Header 中添加以下两项:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: $http_origin

Access-Control-Allow-Origin 不可以配置成 *, 而是当前HTTT前求客户端的 Origin

3)注销登录时, 服务端主动将 token 从 cookie 清理
Set-Cookie: token=; expires=Thu, 01 Jan 1970 00:00:00 GMT;

2、客户端处理

客户端不必显示保存 token 到 cookie. 所有和 EasyNVR 的交互接口需要添加跨域配置, xhrFields: { withCredentials: true } 和 crossDomain: true

例如跨域登录接口调用示例如下:

$.ajax({
    type: "GET",
    url: "http://other-domain/api/v1/login",
    xhrFields: { 
        withCredentials: true
    },
    crossDomain: true, 
    data: {
        username: 'admin',
        password: '21232f297a57a5a743894a0e4a801fc3'//admin
    }
});

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值