本发明涉及互联网技术领域,具体地说是一种通过浏览器获取计算机设备mac地址的方法。
背景技术:
信息系统数据是企业的宝贵财富,企业内部信息系统的使用安全在企业内控管理中的重要性越来越高,如何确保信息系统访问的合法性是企业信息系统设计的关键点之一。
将登录设备与账号进行绑定,在基于获得设备及账号信息的基础上建立对应的鉴权策略,是一个行之有效的解决方案,随着b/s架构系统的普及,计算机设备通过浏览器访问系统的场景也较为常见,如何在该场景下获得客户计算机设备mac地址的需求非常突出。
技术实现要素:
本发明为克服现有技术的不足,提供一种通过浏览器获取计算机设备mac地址的方法,能够方便、快捷获取当前网页所在电脑的mac地址,可以解决特定账号限定在特别电脑上登录的需求,以保护账号的安全及系统数据安全。
为实现上述目的,设计一种通过浏览器获取计算机设备mac地址的方法,其特征在于:包括以下步骤:
(1)获取proxy安装包,安装并运行proxy,其中,proxy的开放指定端口接收websocket连接并接收通过websocket发送过来的特定格式的报文;
(2)进入浏览器,用户打开特定网页,并输入提交登录信息;
(3)信息提交到webserver后,webserver根据token查找上一步proxy发回来的token对应的mac地址的信息,判断是否需拒绝登录请求;
(4)webserver接收到proxy发来的请求,使用proxy内部的rsa公钥加密报文后,首先验证数据的有效性;若有效,则存储token对应mac地址相关数据信息到redis上,在redis上使用hash方式存储,并设置期数据的有效期,在指定时间后,数据将自动删除;若无效,则返回步骤(2);
(5)proxy收到webserver的应答后,可以直接透传或解析转换报文,通过之前建立的websocket发送给浏览器;
(6)浏览器上的webserver收到登录的请求后,首先验证数据有效性,若有效,则调用mac地址授权管理模块,决策用户是否可以进行登录,如果拒绝,则登录失败,给出提示;如果登录成功,则返回authorization信息,并提示登录成功并引导页面跳转;否则,登录失败,返回步骤(2);
(7)登录验证处理完成后,删除token对应的mac地址信息,也就是说,一个token只对应一次验证过程。
所述的特定网页的特征为加载完毕,需通过websocket连接本机proxy,发送指定的能被proxy识别的报文,等待proxy返回的数据,其中返回的数据决定了网页上的哪些功能是可被使用,或决策哪些按钮或功能可以被使用。
所述的能被proxy识别的报文包含identified:识别号、version:版本号、token:页面加载从服务器带出来的会话识别号、time_stamp:发送消息的时间戳,其数据格式为json。
所述的proxy为在计算机设备本地安装的一款软件,具有不可被反编译和不易破解特性,具有获取本机mac地址、并发接收websocket请求、处理接收到消息、加密并发送消息给webserver、同步应答信息给通过websocket连接的浏览器的能力。
所述的浏览器收到websocket应答后,提交登录信息,其提交的信息包含username:用户名、password:密码、token:发给proxy的token、验证码。
本发明同现有技术相比,提供一种通过浏览器获取计算机设备mac地址的方法,能够方便、快捷获取当前网页所在电脑的mac地址,可以解决特定账号限定在特别电脑上登录的需求,以保护账号的安全及系统数据安全。
附图说明
图1为本发明时序图。
具体实施方式
下面根据附图对本发明做进一步的说明。
一种通过浏览器获取计算机设备mac地址的方法,包括以下步骤:
(1)获取proxy安装包,安装并运行proxy,其中,proxy的开放指定端口接收websocket连接并接收通过websocket发送过来的特定格式的报文;
(2)进入浏览器,用户打开特定网页,并输入提交登录信息;
(3)信息提交到webserver后,webserver根据token查找上一步proxy发回来的token对应的mac地址的信息,判断是否需拒绝登录请求;
(4)webserver接收到proxy发来的请求,使用proxy内部的rsa公钥加密报文后,首先验证数据的有效性;若有效,则存储token对应mac地址相关数据信息到redis上,在redis上使用hash方式存储,并设置期数据的有效期,在指定时间后,数据将自动删除;若无效,则返回步骤(2);
(5)proxy收到webserver的应答后,可以直接透传或解析转换报文,通过之前建立的websocket发送给浏览器;
(6)浏览器上的webserver收到登录的请求后,首先验证数据有效性,若有效,则调用mac地址授权管理模块,决策用户是否可以进行登录,如果拒绝,则登录失败,给出提示;如果登录成功,则返回authorization信息,并提示登录成功并引导页面跳转;否则,登录失败,返回步骤(2);
(7)登录验证处理完成后,删除token对应的mac地址信息,也就是说,一个token只对应一次验证过程。
特定网页的特征为加载完毕,需通过websocket连接本机proxy,发送指定的能被proxy识别的报文,等待proxy返回的数据,其中返回的数据决定了网页上的哪些功能是可被使用,或决策哪些按钮或功能可以被使用。
能被proxy识别的报文包含identified:识别号、version:版本号、token:页面加载从服务器带出来的会话识别号、time_stamp:发送消息的时间戳,其数据格式为json。
proxy为在计算机设备本地安装的一款软件,具有不可被反编译和不易破解特性,具有获取本机mac地址、并发接收websocket请求、处理接收到消息、加密并发送消息给webserver、同步应答信息给通过websocket连接的浏览器的能力。
浏览器收到websocket应答后,提交登录信息,其提交的信息包含username:用户名、password:密码、token:发给proxy的token、验证码,
如图1所示,获取网页的浏览器所在电脑的mac地址,具体包括如下步骤。
一、(时序图中步骤1及1.1)在浏览器中输入网址,打开登录页面:登录页面包含的主要内容有:用户名、密码、验证码,隐藏域token。
二、(时序图中步骤2)在页面加载完成后,页面自动运行脚本(js或ts),使用websocket来连接本地的proxy(需要先安装proxy程序到本机上)。连接成功后,向proxy发送消息,消息格式为json,示例如下:
{"identified":"0xff22dd",
"version":"1.0",
"token":"847487393fs02fa",
"url":"/login",
"time_stamp":11113322}。
identified:为标明请求者的身份,以便proxy来识别。
version:指和proxy的交互版本号,proxy会验证自己的版本号是否和该版本号一致。如果不一致,则应答失败请求。
token:为加载登录页面隐藏域携带的token。
url:为当前请求页面所在的地址。
time_stamp:组装此消息的毫秒时间戳,proxy接收到请求后,根据此字段来判断是否超时,如果超时,则应答失败请求。
此处浏览器的websocket等待应答应有超时时间,如超时后没有收到应答,则视为该次请求异常,则应重新发起流程。
三、(时序图中步骤2.1)验证时间戳信息,判断消息是否超时,验证版本号是否匹配,验证identified是否可识别,如果一项不符合,则应答失败给客户端。如果以上验证都通过,则开始处理请求数据,包括以下步骤:
获取本机的mac地址,多个mac地址以字典顺序排序拼接。
获取当前的时间,转换为时间戳。
将以上两步获取的数据和通过websocket获取的数据一起组装成特定的格式报文。
使用proxy内部的rsa公钥加密报文,然后发送httpspost请求到指定的webserver上,等待webserver的应答。
四、(时序图中步骤2.2.1)webserver接收到proxy发来的请求,使用rsa私钥解密报文后,首先验证数据的有效性,包括以下几个部分:
验证时间的有效性,报文时间和webserver时间对比,是否超时。
验证token的有效性。
验证mac地址格式的合法性。
如果以上都满足,则存储token对应mac地址相关数据信息到redis上,在redis上使用hash方式存储,并设置期数据的有效期,在指定时间后,数据将自动删除。
五、(时序图中步骤2.2.2):如果处理过程存在异常,则需要应答rescode为非0的状态,并且需要带上resmsg来描述错误信息及可能的解决方法。如果处理成功,则回复rescode为0的状态,组成报文发送给proxy。
在此过程中,proxy有等待应答超时机制,如果在指定的时间内,没有收到应答消息,则视为请求处理异常,则进行有限次数重试,所以服务端应该考虑token数据的幂等性问题。
六、(时序图中步骤2.2.3):proxy收到webserver的应答后,可以直接透传或解析转换报文,通过之前建立的websocket发送给浏览器。
从页面加载完成后,登录按钮为不可用状态,等待2.2.3的应答来解锁登录按钮,在过程2到2.2.3之间,这一过程,浏览器都是异步来执行的,也就是说在这期间,用户是可以操作网页的,如输入用户名,密码,验证码,然后等待登录按钮变为可用后,点击登录按钮来提交用户名密码等数据。
如上当登录按钮可用时,用户可以提交登录数据进行验证,其提交的数据包含:用户名、密码、验证码、token等信息。
七、(时序图中步骤3.1)3.1webserver收到登录的请求后,首先验证数据有效性,包含以下几个方面:
验证token的有效期。
验证用户名密码是否匹配。
根据token查找redis存储的mac地址是否存在。
以上信息,如果有一个不满足,则登录失败,应答或者重定向页面,提示用户重新登录。如果验证成功,则调用mac地址授权管理模块,决策用户是否可以进行登录,如果拒绝,则登录失败,给出提示。如果登录成功,则返回authorization信息,并提示登录成功并引导页面跳转。
在登录验证处理完成后,删除token对应的mac地址信息,也就是说,一个token只对应一次验证过程。
实施例中,所述token由webserver产生的,其特性具有系统唯一性,一次会话(session)中,其值为唯一的,生命周期从打开浏览器首次访问指定网站开始,即会话开始,也就意味一个新的token产生。token在一次登录提交后失效(不论登录是否是成功或者失败)。其token贯穿于用户对页面一次交互流程,如从登录页面加载出来开始,到登录提交服务端验证结束。关联了用户提交的登录请求和proxy发回的mac地址信息。token产生的方案有:uuid、雪花算法等,在分布式环境中,可能要考虑到使用redis的incr来实现原子自增长获取的全局唯一序号。
实施例中,登录页面和proxy通过websocket协议通信,proxy和webserver使用https协议,其通信内容,使用rsa非对称加密方式。解密的秘钥只存储于webserver,保证数据安全及鉴权数据防止被伪造。
实施例中,浏览器通过websocket和proxy建立的连接,其收到应答消息后,浏览器负责释放连接,proxy在处理完应答后指定时间强制释放连接,以确保浏览器和proxy会话的可靠性及proxy对连接资源生命周期的管理。
实施例中,websocket发送给proxy的报文中,包含identified:身份识别号,version:版本协商信息,token:由webserver产生的会话id,时间等信息。其中identified约定的身份标识;
浏览器和proxy的交互中,可遇见的异常情况如下:
proxy没有启动,导致websocket连接失败,则网页中给出引导提示。
版本号协商不对,如proxy的版本过低,需要升级proxy的版本来解决。
发送给proxy的消息超时,网页中进行重试操作解决。
proxy的应答消息中包含处理结果信息,其关键字段有rescode:处理结果码,非零,则存在失败,如果失败,则一定存在resmsg字段,对失败原因进行描述,网页中通websocket接收到消息后,如果成功,则对应解锁某些功能或者决策判断,如果失败,则应给出错误提示及引导操作。
实施中,解决websocket的粘包问题,浏览器和proxy通信使用json格式,proxy收到数据后,验证json有效性,如果无效,则需要考虑使用等待再次收到消息进行验证json有效性,当一次json有效。当一个连接关闭后,则丢弃当前连接所有已接收的数据。
实施例中,所述proxy获取用户的mac地址,推荐使用go语言编写,使用go系统提供的net包下的api来获取系统的mac地址列表,其多个mac地址需进行字典排序然后对其进行拼接。然后组装成报文,加密传输。其proxy和webserver的通信,因为使用了https的方式,所以不存在粘包问题。其请求使用post的方式,加密的内容存储于httpbody中。httpheader中包含了请求的基本信息,包括加密数据的字节(byte)长度content-length字段。
实施例中,所述加密传输,其使用rsa非对称加密,公钥加密,私钥解密,公钥包含在程序中,只能应用程序可使用,私钥只存储在webserver端,用于解密由proxy发来的数据。
实施例中,webserver读取proxy发来的数据,解密数据,验证数据的超时时间,及token的有效性,确保数据的安全及不被伪造,每一个请求被proxy构造后,在一定时间内没有被webserver所接收或者超时接收该消息,则该消息被视为无效的消息,即该请求被视为无效的请求,需要proxy来提供有限的重试机制,在重试无果后,将应答给浏览器,重新发起交互流程。如果重新发起流程,则会产生一个全新token。
实施例中,webserver存储proxy发来的数据,在单节点部署中,则使用localcache方式,在集群环境中,需要考虑到数据共享问题,则需要考虑使用redis的hash存储,或者db的方式存储和维护数据的状态,以达到多节点数据共享。
实施例中,proxy将应答通过websocket返回给浏览器,如果处理成功消息则浏览器解锁提交按钮,提交的数据在webserver端做验证,其验证项中包括用户名,密码,token。如果所有验证通过,则表示用户登录用户名密码正确,mac地址有此登录权限,则进行登录授权,否则登录失败,通过应答给出拒绝服务提示。
实施例中,webserver的登录验证处理完成后,则token对应的生命周期结束。webserver删除或标记为无效数据(该token对应mac地址相关记录)。
实施例中,proxy做为代理服务,处理请求及转发请求,处理应答及转发应答,和浏览器及webserver都使用io的方式,所以浏览器发起一次请求,需要有超时时间机制,超时后,应重新发起请求。proxy和webserver同样需要具备超时机制,如果超时,则由proxy进行有限次数重试,而不需要重新发起流程。
基于以上流程及交互机制,来验证当前用户登录电脑的合法,解决账号授权登录及账号安全问题,增强了系统数据的安全性,由于每个交互中,都增加超时机制,proxy和webserver的通信使用https方式,https是一种加密防窃听的通信技术,其内容使用了rsa加密,保证了数据的安全性,即发起者也不能获得原始数据,proxy只接收本地的websocket连接,也就保证了经由proxy的消息一定是来自当前浏览器发来的token及相关信息。从而准确获取当前网页所在电脑的mac地址。在其它请求时,就通过token来验证当前用户请求的资源,是否在该请求电脑上被授权。
1.一种通过浏览器获取计算机设备mac地址的方法,其特征在于:包括以下步骤:
(1)获取proxy安装包,安装并运行proxy,其中,proxy的开放指定端口接收websocket连接并接收通过websocket发送过来的特定格式的报文;
(2)进入浏览器,用户打开特定网页,并输入提交登录信息;
(3)信息提交到webserver后,webserver根据token查找上一步proxy发回来的token对应的mac地址的信息,判断是否需拒绝登录请求;
(4)webserver接收到proxy发来的请求,使用proxy内部的rsa公钥加密报文后,首先验证数据的有效性;若有效,则存储token对应mac地址相关数据信息到redis上,在redis上使用hash方式存储,并设置期数据的有效期,在指定时间后,数据将自动删除;若无效,则返回步骤(2);
(5)proxy收到webserver的应答后,可以直接透传或解析转换报文,通过之前建立的websocket发送给浏览器;
(6)浏览器上的webserver收到登录的请求后,首先验证数据有效性,若有效,则调用mac地址授权管理模块,决策用户是否可以进行登录,如果拒绝,则登录失败,给出提示;如果登录成功,则返回authorization信息,并提示登录成功并引导页面跳转;否则,登录失败,返回步骤(2);
(7)登录验证处理完成后,删除token对应的mac地址信息,也就是说,一个token只对应一次验证过程。
2.根据权利要求1所述的一种通过浏览器获取计算机设备mac地址的方法,其特征在于:所述的特定网页的特征为加载完毕,需通过websocket连接本机proxy,发送指定的能被proxy识别的报文,等待proxy返回的数据,其中返回的数据决定了网页上的哪些功能是可被使用,或决策哪些按钮或功能可以被使用。
3.根据权利要求2所述的一种通过浏览器获取计算机设备mac地址的方法,其特征在于:所述的能被proxy识别的报文包含identified:识别号、version:版本号、token:页面加载从服务器带出来的会话识别号、time_stamp:发送消息的时间戳,其数据格式为json。
4.根据权利要求1所述的一种通过浏览器获取计算机设备mac地址的方法,其特征在于:所述的proxy为在计算机设备本地安装的一款软件,具有不可被反编译和不易破解特性,具有获取本机mac地址、并发接收websocket请求、处理接收到消息、加密并发送消息给webserver、同步应答信息给通过websocket连接的浏览器的能力。
5.根据权利要求1所述的一种通过浏览器获取计算机设备mac地址的方法,其特征在于:所述的浏览器收到websocket应答后,提交登录信息,其提交的信息包含username:用户名、password:密码、token:发给proxy的token、验证码。
技术总结