我将在内部网络上的Windows环境(通过Cygwin)中运行node.js服务器,该网络需要访问客户端的Windows登录信息。我提出的最好的方法是使用带有ASP页面的iFrame
Response.Write(Request.ServerVariables("AUTH_USER"))
然后,在加载时获取iFrame的内容并将其存储在Javascript中。它应该包含类似“MANAGER / HisLogin”的东西,我可以存储该变量。出于安全考虑,我可能会将其打磨/加盐。
夫妻问题:
做这样的事情有任何固有的安全风险吗? IIS和Node.js将在同一台服务器上运行,但不同的端口。如果需要,我可以让IIS只监听localhost。
是否有更好的路线,而不是通过Javascript获取并依赖iFrame内容?我意识到客户端可以更改iFrame和Javascript变量的内容,但内容只读一次,我可以在iFrame加载调用的Javascript闭包中创建一个自毁函数,如:
Example:
var login = function() {
var loginInfo = null;
return {
init: function(theLogin) {
loginInfo = theLogin;
this.init() = function() {};
},
getLogin: function() {
return loginInfo;
}
};
}();
这是标题node.js正在报告
headers: {
host: '/*Removed*/',
connection: 'keep-alive',
accept: 'application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'user-agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7',
'accept-encoding': 'gzip,deflate,sdch',
'accept-language': 'en-US,en;q=0.8',
'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
cookie: 'socketio=websocket'
},
我想到的另一种选择是从加载页面的iFrame发布结果而不是Response.Write。我必须找到一种方法将消息与彼此联系起来。
答案 0 :(得分:1)
只要您在公司内部网或内部网络中工作并且浏览器上的安全性允许它。这可能使用JavaScript
var wshshell=new ActiveXObject("wscript.shell");
var username=wshshell.ExpandEnvironmentStrings("%username%");
答案 1 :(得分:0)
您使用的是哪种身份验证方法?如果您使用的是基本身份验证,那么您的服务器端javascript应该能够从身份验证HTTP请求标头中读取用户ID。它将采用base64编码的字符串。
编辑: This question的代码显示了如何使用node.js来读取基本身份验证标头。
答案 2 :(得分:0)
回答:编辑2
您可以使用postMessage API跨帧进行通信。如果您正在寻找跨浏览器工作的东西,请查看Google Closure Library - > CrossPageChannel。
在这里,您将找到一个演示:http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/xpc/index.html
和文档: http://closure-library.googlecode.com/svn/docs/class_goog_net_xpc_CrossPageChannel.html
我将运行node.js Windows环境中的服务器(通过 Cygwin)在内部网络上 需要访问Windows登录 客户的信息。
我怀疑Javascript是否可以使用Request.ServerVariables("AUTH_USER")
,因为它是特定于Windows的(与授权标头无关),如果我理解正确,则返回当前登录的Windows用户。
解决此问题的最佳方法是使用postMessage。你应该sha2(不要sha1)并加密密码以增加安全性。