思路:从URL中解析出第三方传过来的账号和密码,用js给将账号和密码给登录页面的输入框赋值,并用js自动触发点击事件。
从IIS找到登录专用的login.js
RDL的路径:C:\Program Files\Siemens\UserManagement\web\ipsimatic-logon\IDPAuthSite\js\login.js
//单点登录
$(window).on('load', function () { // 所有页面资源都已加载完成,现在执行你的方法//https://siemensdc/OpcenterRDnL/?sl=un=guoyihua&uwd=Gyh123456//https://siemensdc/OpcenterRDnL/?sl=dW49Z3VveWlodWEmdXdkPUd5aDEyMzQ1Ng==// 延迟200毫秒执行setTimeout(function () {goSAutoLogin();// 在这里编写你的代码console.log("页面和所有资源都已加载完成!");}, 200); // 页面加载完成后自动点击按钮function goSAutoLogin() {const hashString = window.location.hash; var jmParams = safeAtob(hashString);if (jmParams == null || jmParams == "") {return;}jmParams = eval('(' + jmParams + ')');// 使用split()方法根据"-"分隔字符串var parts = jmParams.requestParams.split('-');// 获取分隔符之前的部分(数组的第一个元素)var beforeDash = parts[0];var jmParams2 = safeAtob(beforeDash);jmParams2 = eval('(' + jmParams2 + ')');var jmUrlParams = jmParams2.service;console.log("jmUrlParams:", jmUrlParams);/// // 获取当前页面的URL // 创建一个URL对象来表示当前页面的URLvar urlObject = new URL(jmUrlParams);// 使用URLSearchParams对象来获取查询参数var params = new URLSearchParams(urlObject.search);// 提取un和uwd参数var encoded = params.get("sl");if (encoded != null) {encoded = atob(encoded);console.log("encoded", encoded);const params = getQueryParams(encoded);var un = params.un;var uwd = params.uwd;// 输出结果console.log("un:", un);console.log("uwd:", uwd);if (un != null && uwd != null) {$("#username").val(un);$("#password").val(uwd);$("#loginFormSubmit").prop('disabled', false);$("#loginFormSubmit").removeClass('disabled');// 页面加载完成后自动点击按钮$('#loginFormSubmit').trigger('click');}}}//base64解码function safeAtob(base64) {try {// 如果字符串以 # 开头(如 URL hash),则去掉它if (base64.startsWith('#')) {base64 = base64.slice(1);}base64 = decodeURIComponent(base64);// 尝试解码 Base64 字符串const decoded = atob(base64);return decoded;} catch (error) {// 解码失败时处理错误console.error(' Base64 解码失败:', error);return null; // 或者返回其他默认值或执行其他错误处理逻辑}}// 获取查询参数function getQueryParams(queryString) {const params = {};const queryArray = queryString.split('&');queryArray.forEach(param => {const [key, value] = param.split('=');params[decodeURIComponent(key)] = decodeURIComponent(value);});return params;}
});