我開發了一個NODE API來爲Angular應用程序提供數據。最初的想法是使用NODESSPI進行集成身份驗證,因爲我們計劃在法人環境中運行此操作。由於API節點將託管在不同的域上,所以需要CORS。NODESSPI在法人環境中的節點
我很努力地使用NODESSPI進行$ HTTP請求的集成驗證。
爲了在我的電腦上測試它,我創建了一個簡單的js文件,用express來實例化一個節點服務器來運行我的角度應用程序(我知道它可以不用快速完成,但實現起來更快)。它運行在Port 5001上。
'use strict';
var express = require('express');
var http = require('http');
var path = require('path');
var morgan = require('morgan');
var errorhandler = require('errorhandler');
var app = express();
// all environments
app.set('port', process.env.PORT || 5001);
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('ejs').renderFile);
app.use(morgan('dev'));
// serve up static assets
app.use(express.static(path.join(__dirname, 'app')));
// development only
if ('development' === app.get('env')) {
app.use(errorhandler());
}
console.log('trying to start server...', path.join(__dirname, 'app'));
http.createServer(app).listen(app.get('port'), function() {
console.log('App server listening on port ' + app.get('port'));
});
我的Angular代碼處於非常早期階段,因爲它的目的只是證明這個概念。注意我沒有在$ http get中指定任何類型的頭文件。
main.controller.js
'use strict';
monthApp.controller('mainPageCtrl',
function mainPageCtrl($scope, $rootScope, $location, $rootElement, $q, $http) {
console.log("mainPageCtrl is in control");
$http({
url: 'http://localhost:3000/api/',
methof: 'GET'
})
.then(function(data){
console.log(data);
})
.catch(function(error){
console.log(error);
})
});
運行我NODE API模擬服務器端,我還使用快車,並在端口3000上運行它,這裏是代碼:
//Lib Dependecies
var cookieParser = require("cookie-parser");
var bodyParser = require("body-parser");
var sql = require("seriate");
var cors = require("cors");
var express = require("express");
var path = require("path");
var Q = require("q");
var oracle = require("oracledb");
var restClient = require("node-rest-client").Client;
var nodeSSPI = require('node-sspi');
var ActiveDirectory = require("activedirectory");
//API Custom Modules Dependecies
var reservoirApi = require("./reservoirApi");
var ldapApi = require("./ldapApi");
var energyApi = require("./energyApi");
var PIApi = require("./PIApi");
//Express config
var app = express();
app.use (cors());
app.options('*', cors());
app.use (bodyParser.json());
app.use (bodyParser.urlencoded({extended: true}));
app.use (cookieParser());
app.use (express.static(__dirname + '/public'));
//Server config
var serverConfig = {port: 3000};
//Sql server config
var config = {
"server":"myserver",
"user":"myuser",
"password":"mypass",
"database":"mydatabase"
};
sql.setDefaultConfig(config);
//Setup endpoint routes
var router = express.Router();
//Basic Router Config
router.use(function(req, res, next){
//Integrated Authentication for Windows
var nodeSSPIObj = new nodeSSPI({
retrieveGroups: true
});
try{
nodeSSPIObj.authenticate(req, res, function(err){
res.finished || next();
});
}
catch(err)
{
res.status(500).send(JSON.stringify({status: 500, message: "URL mal formatada, verifique sua requisição HTTP", detail: err.message}));
}
});
router.get('/', function(req, res){
res.json({Message: 'Data Access API.', AuthUser: req.connection.user, AuthUserGroups: req.connection.userGroups });
});
app.use('/api', router);
//Modules End-Point registration
reservoirApi.register(router);
ldapApi.register(router);
energyApi.register(router);
PIApi.register(router);
//Start Server
app.listen(serverConfig.port);
console.log("SOA API Listening port at " + serverConfig.port)
的結果是:
當用C hrome到達地址:http://localhost:3000/api這工作得很好。它檢測我的用戶帳戶並返回我所屬的所有窗口組。
當運行我的角碼返回: 對象{數據:「」狀態:401,配置:對象,狀態文本:「未授權」}
當郵差測試它也可以(與授權當我從路由器中刪除所有NodeSSPI代碼時,我可以接收數據(我已經在我的角度應用程序上測試了其他終端),因此CORS在服務器端正確設置。
有什麼我在Angular方面失蹤?我正努力從這裏前進。感謝任何幫助。