实践|获取操作系统用户名ActiveXObject(仅IE支持)

·  阅读 347

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情

实践|获取操作系统用户名ActiveXObject(仅IE支持)

一、前言

对于很多现在的前后端分离项目,工程化前端项目来说,兼容 Internet Explorer 浏览器,似乎成了伪需求。而仅在Internet Explorer 支持的 ActiveXObject,可以实现获取操作系统用户信息,从而实现免登录功能的方法,许多人可能听都没听过。

而在2012年以前, Internet Explorer 占据了大部分的市场份额,一家浏览器的市场份额超过其他所有浏览器的份额,在那时这个方法是十分有意义的。

在一些特殊企业,操作系统,工作电脑是加有特殊防护的,安装一个软件,一个浏览器是十分不容易的,要走十分复杂流程,并且由专职人员处理。人们被限制只能使用电脑自带的浏览器,而因为操作系统级别的防护和局域网的关系,被外部攻击的可能大大降低,于是产生了业务系统免登录,只要登录操作系统即可,而通过操作系统的登录名作为业务系统的用户身份凭证。事实上这里面有一套严密的设计,登录操作系统的只能是认证过的员工号,而这些员工号又被当做各种业务系统的账号。

在这样的背景下,我于2021年,没错就是 Internet Explorer 正式停止维护的前一年,遇到了一个老系统,里面就有这样一个需求和做法。使用 ActiveXObject 实现获取当前登录的操作系统用户信息,进而用此作为凭证静默登录业务系统。

tips1 很少有方法支持通过浏览器获取当前登录的操作系统用户信息,这被视为极度危险的操作。

tips2 据我所知仅 Internet Explorer 支持通过 ActiveXObject 获取当前登录的操作系统用户信息,了解这点对打算使用该方法的人来说很重要。

二、关键技术点提前知

1.通过 ActiveXObject 获取当前操作系统的登录用户的信息

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 代码

<template>
  <div>
    <h1>测试ie上获取操作系统用户信息</h1>
    <h2>系统用户名:{{ systemUsername }}</h2>
  </div>
</template>

<script>
export default {
  name: 'WindowSystemUsername',
  data () {
    return {
      systemUsername: ''
    }
  },
  mounted () {
    this.getWindowUsername()
  },
  methods: {
    /**
     * 获取操作系统的用户账号(仅支持ie浏览器)
     * @returns {string}
     */
    getWindowUsername () {
      // 获取浏览器类型
      let ua = navigator.userAgent.toLocaleLowerCase()
      let isIE = false
      let userName = ''
      if (ua.match(/msie/) != null || ua.match(/trident/) != null) {
        isIE = true
      }

      // 不是ie浏览器,结束执行,返回空字符串
      if (!isIE) return ''
      try {
        let WshNetwork = new ActiveXObject('WScript.Network')
        userName = WshNetwork.UserName
        console.dir(WshNetwork)
      } catch (e) {
        const tips = '自动登录需要允许Activexobject脚本运行,请您先进行设置!\n' +
          '+"\\n设置步骤:在"IE-Internet选项-安全-自定义级别-ActiveX控件和插件对未标记为可安全执行脚本的ActiveX插件",设置为“提示”或“启用”'
        alert(tips)
      }
      
      this.systemUsername = userName
      return userName
    }
  }
}
</script>
分类:
前端
标签:
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改