Skip to content

IISNode and node-expose-sspi #200

Open
@alpozgur

Description

@alpozgur

Hi;
I'm using nodejs 22.4.0 and iisnode (for hosting in iis).
I'm trying to implement windows authentication (domain based) to my app. There will be 2 type auth.. One anonymous (users will enter their username and pass) and second windows authencticated... for that reason i can't use directly in app level. I have a controller and want to check if user is logged in to domain or not...
My problem is, I can't get domain logged in users info but i always get null...
sample code

var config = require("../../config");
var ldapAuthUser = require("../lib/ldaps");
var prepServiceToken = require("../lib/wsTokenHelper.js");
var userTokenHelper = require("../lib/tokenHelper.js");
var nVersion = require("../../package.json");
var helper = require("../lib/helper");
var wsAuth = require("../Bl/webServiceDbOperations");
const cryptoHelper = require("../lib/cryptrHelper");
const AD = require("activedirectory2");
const {sso} = require('node-expose-sspi');
const jwt = require('jsonwebtoken');
exports.authenticateUser= async function(req, res) {
try {

console.log(req.headers); //comes full but no user info
console.log('SSO Data:', req.sso); //always undefined
var username = req.headers['x-iisnode-auth_user']; //added iisnode promoteServerVars
var authenticationType = req.headers['x-iisnode-auth_type'];//added iisnode promoteServerVars
console.log(username); //empty
console.log(authenticationType); //eömpty
console.log(req.headers['x-iisnode-logon_user']);
// SSO
sso.auth()(req, res, () => {
if (req.sso && req.sso.user) {
const username = req.sso.user.displayName;
const userId = req.sso.user.sid;

            // JWT token üret
            const token = jwt.sign(
                { username, userId },
                config.secret, 
                { expiresIn: '1h' } 
            );
            res.status(200).json({
                success: true,
                message: 'Authentication successful',
                token,
                username,
            });
        } else {
            res.status(401).json({
                success: false,
                message: 'SSO authentication failed',
            });
        }
    });
} catch (err) {
    console.error('SSO Authentication Error:', err);
    res.status(500).json({
        success: false,
        message: 'An error occurred during authentication',
    });
}

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions