theme: channing-cyan
highlight: a11y-dark
实践|获取操作系统用户名ActiveXObject(仅IE支持)
一、前言
对于很多现在的前后端分离项目,工程化前端项目来说,兼容 Internet Explorer 浏览器,似乎成了伪需求。而仅在Internet Explorer 支持的 ActiveXObject,可以实现获取操作系统用户信息,从而实现免登录功能的方法,许多人可能听都没听过。
而在2012年以前, Internet Explorer 占据了大部分的市场份额,一家浏览器的市场份额超过其他所有浏览器的份额,在那时这个方法是十分有意义的。
在一些特殊企业,操作系统,工作电脑是加有特殊防护的,安装一个软件,一个浏览器是十分不容易的,要走十分复杂流程,并且由专职人员处理。人们被限制只能使用电脑自带的浏览器,而因为操作系统级别的防护和局域网的关系,被外部攻击的可能大大降低,于是产生了业务系统免登录,只要登录操作系统即可,而通过操作系统的登录名作为业务系统的用户身份凭证。事实上这里面有一套严密的设计,登录操作系统的只能是认证过的员工号,而这些员工号又被当做各种业务系统的账号。
在这样的背景下,我于2021年,没错就是 Internet Explorer 正式停止维护的前一年,遇到了一个老系统,里面就有这样一个需求和做法。使用 ActiveXObject 实现获取当前登录的操作系统用户信息,进而用此作为凭证静默登录业务系统。
tips1 很少有方法支持通过浏览器获取当前登录的操作系统用户信息,这被视为极度危险的操作。
tips2 据我所知仅 Internet Explorer 支持通过 ActiveXObject 获取当前登录的操作系统用户信息,了解这点对打算使用该方法的人来说很重要。
二、关键技术点提前知
1.通过 ActiveXObject 获取当前操作系统的登录用户的信息
js let WshNetwork = new ActiveXObject("WScript.Network"); // 获取当前用户登录域 const userDomain = WshNetwork.UserDomain; // 获取计算机名 const computerName = WshNetwork.ComputerName; // 获取登录当前操作系统的用户名 const computerName = WshNetwork.UserName;
2.注意事项
自动登录需要允许Activexobject脚本运行,所以可能需要提醒用户做以下操作(这通常是运维人员统一设置的)。
设置步骤:在"IE-Internet选项-安全-自定义级别-ActiveX控件和插件对未标记为可安全执行脚本的ActiveX插件",设置为“提示”或“启用”'。
三、示例 demo 代码
```html
测试ie上获取操作系统用户信息
系统用户名:{{ systemUsername }}
```