【问题标题】:Authenticate with Active Directory using nodeJS使用 nodeJS 向 Active Directory 进行身份验证
【发布时间】:2016-02-25 18:45:40
【问题描述】:
我公司正在进行的主要项目是一个 AngularJS Web 应用程序,它为所有数据调用 C#.Net REST API。此应用程序的用户都登录到与 Active Directory 绑定的 Windows 计算机。这意味着所有身份验证都由操作系统处理,因为所有凭据都由 Web 浏览器自动发送并由 IIS 处理。
我的最新任务是让不同的 NodeJS 应用程序调用 REST 服务并对数据进行一些处理。不幸的是,即使我使用正确的 Active Directory 凭据登录到计算机,它也不会与 REST 请求一起发送,这会导致 IIS 出现 401.2 错误。确保已经存在的 Active Directory 凭据与 NodeJS REST 请求一起发送的正确方法是什么?
【问题讨论】:
标签:
node.js
rest
iis
asp.net-web-api
【解决方案1】:
有node-sspi。用法示例:
'use strict';
var express = require('express');
var app = express();
var server = require('http').createServer(app);
app.use(function (req, res, next) {
var nodeSSPI = require('node-sspi');
var nodeSSPIObj = new nodeSSPI({
retrieveGroups: true
});
nodeSSPIObj.authenticate(req, res, function(err){
res.finished || next();
});
});
app.use(function (req, res, next) {
var out = 'Hello ' + req.connection.user + '! You belong to following groups:<br/><ul>';
if (req.connection.userGroups) {
for (var i in req.connection.userGroups) {
out += '<li>'+ req.connection.userGroups[i] + '</li><br/>\n';
}
}
out += '</ul>';
res.send(out);
});
// Start server
var port = process.env.PORT || 3000;
server.listen(port, function () {
console.log('Express server listening on port %d in %s mode', port, app.get('env'));
});