2017-03-09 26 views
1

有正在使用的LDAP-auth其工作的passport.js實現。現在,下一步是使用Crypto-js客戶端,如下所示加密密碼:PassportJS - 獲取有效載荷數據之前,它被傳遞給passport.authenticate作爲請求參數

Client-side angular-js controller

$scope.authenticate = function() {  
    var auth = new login(); 
    auth.username = $scope.username; 
    auth.password = CryptoJS.AES.encrypt($scope.password); //// HERE 

    auth.$save(function (response){ 
    console.log(response); 
    },function(err){ 
    console.log(err); 
    }); 
} 

Server-side service

..... 
..... 
app.post('/login', passport.authenticate('ldapauth'), (req, res) => { 

    console.log("req.user: ",req.user); 
    req.session.username = req.user[ldap.username]; 
    req.session.userModel = req.user; 
    res.status(200).send({"success": 'success'}); 
}); 
..... 

在服務器端服務調用passport.authenticate與前請求'請求'aes加密的密碼需要解密。這怎麼能在這裏實現? (現在的問題是不是加密,但如何才被傳遞給passport.authenticate的請求來獲取數據)

+1

我不確定你要在這裏做什麼,但SHA1是散列函數,而不是加密。它不能被「解密」。 – estus

+0

爲什麼不使用HTTPS(SSL)來加密服務器客戶端之間的通信? –

+0

@estus - 的想法是讓任何形式的暴力攻擊的速度較慢,並保持從密碼通過電腦檢測到隱藏。網絡通過https進行加密,我不必關心這一點。我只是想讓密碼遠離客戶端的肉眼。 –

回答

2

@Abhijay Ghildyal我不認爲他們明白你的問題。在將請求傳遞給passport.authenticate()之前確實有可能截獲請求。什麼你想要做的就是這個代碼通過添加到您的express.js或任何文件,你做你的快遞服務實現。另外,我在這裏,因爲在那個時間點解密,而不是req.user的request.body用戶還沒有登錄,但是如果你的情況不同,那麼你可以用同樣的方法解密req.user。 (這裏的變量應用程序是)你的服務器即VAR應用程序的名稱=快遞(;

app.use(function(req, res, next) { 
    if(req.url === '/login'){ 
     //CryptoJS.AES.decrypt() is Assumed to be the decrypter function here. 
     req.body = CryptoJS.AES.decrypt(req.body); 
     console.log(req.body); //To view decrypted body 
    } 
    next(); 
}); 

這就是它。這個中間件函數將在passport.authenticate()函數之前到達。只要確保,如果你將其應用到req.body先添加代碼的這些線,導入bodyParser後(bodyParser =需要(「身體解析器」);)以上的通道前。

app.use(bodyParser.urlencoded({ 
    extended: true 
})); 
app.use(bodyParser.json());