mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-01-25 21:53:14 -05:00
Added SAML, JumpCloud support.
This commit is contained in:
parent
864b54fae1
commit
5a06c46d3e
BIN
public/images/login/generic32.png
Normal file
BIN
public/images/login/generic32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 759 B |
BIN
public/images/login/generic64.png
Normal file
BIN
public/images/login/generic64.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
@ -179,6 +179,18 @@
|
|||||||
"__callbackurl": "https://server/auth-reddit-callback",
|
"__callbackurl": "https://server/auth-reddit-callback",
|
||||||
"clientid": "xxxxxxxxxxxxxxxxxxxxxxx",
|
"clientid": "xxxxxxxxxxxxxxxxxxxxxxx",
|
||||||
"clientsecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"clientsecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
},
|
||||||
|
"jumpcloud": {
|
||||||
|
"__callbackurl": "https://server/auth-jumpcloud-callback",
|
||||||
|
"entityid": "meshcentral",
|
||||||
|
"idpurl": "https://sso.jumpcloud.com/saml2/saml2",
|
||||||
|
"cert": "jumpcloud-saml.pem"
|
||||||
|
},
|
||||||
|
"saml": {
|
||||||
|
"__callbackurl": "https://server/auth-saml-callback",
|
||||||
|
"entityid": "meshcentral",
|
||||||
|
"idpurl": "https://server/saml2",
|
||||||
|
"cert": "saml.pem"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -23957,6 +23957,13 @@
|
|||||||
"login-mobile.handlebars->container->page_content->column_l->1->1->0->1->loginpanel->1->authStrategies->auth-intel"
|
"login-mobile.handlebars->container->page_content->column_l->1->1->0->1->loginpanel->1->authStrategies->auth-intel"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"en": "Sign-in using JumpCloud",
|
||||||
|
"xloc": [
|
||||||
|
"login-mobile.handlebars->container->page_content->column_l->1->1->0->1->loginpanel->1->authStrategies->auth-jumpcloud",
|
||||||
|
"login.handlebars->container->column_l->centralTable->1->0->logincell->loginpanel->1->authStrategies->auth-jumpcloud"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"en": "Sign-in using Reddit",
|
"en": "Sign-in using Reddit",
|
||||||
"nl": "Log in met Reddit",
|
"nl": "Log in met Reddit",
|
||||||
@ -24044,6 +24051,13 @@
|
|||||||
"default.handlebars->25->1035"
|
"default.handlebars->25->1035"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"en": "Single Sign-in",
|
||||||
|
"xloc": [
|
||||||
|
"login-mobile.handlebars->container->page_content->column_l->1->1->0->1->loginpanel->1->authStrategies->auth-saml",
|
||||||
|
"login.handlebars->container->column_l->centralTable->1->0->logincell->loginpanel->1->authStrategies->auth-saml"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cs": "Velikost",
|
"cs": "Velikost",
|
||||||
"de": "Größe",
|
"de": "Größe",
|
||||||
|
@ -10880,12 +10880,13 @@
|
|||||||
|
|
||||||
// Add user auth strategy
|
// Add user auth strategy
|
||||||
var shortuserid = user._id.split('/')[2];
|
var shortuserid = user._id.split('/')[2];
|
||||||
if (shortuserid.startsWith('~twitter:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/twitter64.png';; }
|
if (shortuserid.startsWith('~twitter:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/twitter64.png'; }
|
||||||
else if (shortuserid.startsWith('~google:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/google64.png';; }
|
else if (shortuserid.startsWith('~google:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/google64.png'; }
|
||||||
else if (shortuserid.startsWith('~github:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/github64.png';; }
|
else if (shortuserid.startsWith('~github:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/github64.png'; }
|
||||||
else if (shortuserid.startsWith('~reddit:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/reddit64.png';; }
|
else if (shortuserid.startsWith('~reddit:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/reddit64.png'; }
|
||||||
else if (shortuserid.startsWith('~jumpcloud:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/jumpcloud64.png';; }
|
else if (shortuserid.startsWith('~jumpcloud:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/jumpcloud64.png'; }
|
||||||
else if (shortuserid.startsWith('~intel:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/intel64.png';; }
|
else if (shortuserid.startsWith('~intel:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/intel64.png'; }
|
||||||
|
else if (shortuserid.startsWith('~:')) { QV('p30userAuthServiceLogo', true); Q('p30userAuthServiceLogo').src = 'images/login/generic64.png'; }
|
||||||
else { QV('p30userAuthServiceLogo', false); }
|
else { QV('p30userAuthServiceLogo', false); }
|
||||||
|
|
||||||
// Server permissions
|
// Server permissions
|
||||||
|
@ -79,7 +79,9 @@
|
|||||||
<a id="auth-google" href="auth-google" style="display:none"><img src="images/login/google32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using Google" /></a>
|
<a id="auth-google" href="auth-google" style="display:none"><img src="images/login/google32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using Google" /></a>
|
||||||
<a id="auth-github" href="auth-github" style="display:none"><img src="images/login/github32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using GitHub" /></a>
|
<a id="auth-github" href="auth-github" style="display:none"><img src="images/login/github32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using GitHub" /></a>
|
||||||
<a id="auth-reddit" href="auth-reddit" style="display:none"><img src="images/login/reddit32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using Reddit" /></a>
|
<a id="auth-reddit" href="auth-reddit" style="display:none"><img src="images/login/reddit32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using Reddit" /></a>
|
||||||
|
<a id="auth-jumpcloud" href="auth-jumpcloud" style="display:none"><img src="images/login/jumpcloud32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using JumpCloud" /></a>
|
||||||
<a id="auth-intel" href="auth-intel" style="display:none"><img src="images/login/intel32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using Intel" /></a>
|
<a id="auth-intel" href="auth-intel" style="display:none"><img src="images/login/intel32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using Intel" /></a>
|
||||||
|
<a id="auth-saml" href="auth-saml" style="display:none"><img src="images/login/generic32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Single Sign-in" /></a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@ -371,7 +373,9 @@
|
|||||||
if (authStrategies.indexOf('google') >= 0) { QV('auth-google', true); }
|
if (authStrategies.indexOf('google') >= 0) { QV('auth-google', true); }
|
||||||
if (authStrategies.indexOf('github') >= 0) { QV('auth-github', true); }
|
if (authStrategies.indexOf('github') >= 0) { QV('auth-github', true); }
|
||||||
if (authStrategies.indexOf('reddit') >= 0) { QV('auth-reddit', true); }
|
if (authStrategies.indexOf('reddit') >= 0) { QV('auth-reddit', true); }
|
||||||
|
if (authStrategies.indexOf('jumpcloud') >= 0) { QV('auth-jumpcloud', true); }
|
||||||
if (authStrategies.indexOf('intel') >= 0) { QV('auth-intel', true); }
|
if (authStrategies.indexOf('intel') >= 0) { QV('auth-intel', true); }
|
||||||
|
if (authStrategies.indexOf('saml') >= 0) { QV('auth-saml', true); }
|
||||||
}
|
}
|
||||||
|
|
||||||
window.onresize = center;
|
window.onresize = center;
|
||||||
|
@ -78,6 +78,7 @@
|
|||||||
<a id="auth-github" href="auth-github" style="display:none"><img src="images/login/github32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using GitHub" /></a>
|
<a id="auth-github" href="auth-github" style="display:none"><img src="images/login/github32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using GitHub" /></a>
|
||||||
<a id="auth-reddit" href="auth-reddit" style="display:none"><img src="images/login/reddit32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using Reddit" /></a>
|
<a id="auth-reddit" href="auth-reddit" style="display:none"><img src="images/login/reddit32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using Reddit" /></a>
|
||||||
<a id="auth-jumpcloud" href="auth-jumpcloud" style="display:none"><img src="images/login/jumpcloud32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using JumpCloud" /></a>
|
<a id="auth-jumpcloud" href="auth-jumpcloud" style="display:none"><img src="images/login/jumpcloud32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Sign-in using JumpCloud" /></a>
|
||||||
|
<a id="auth-saml" href="auth-saml" style="display:none"><img src="images/login/generic32.png" loading="lazy" width="32" height="32" style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer" title="Single Sign-in" /></a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@ -386,6 +387,8 @@
|
|||||||
if (authStrategies.indexOf('github') >= 0) { QV('auth-github', true); }
|
if (authStrategies.indexOf('github') >= 0) { QV('auth-github', true); }
|
||||||
if (authStrategies.indexOf('reddit') >= 0) { QV('auth-reddit', true); }
|
if (authStrategies.indexOf('reddit') >= 0) { QV('auth-reddit', true); }
|
||||||
if (authStrategies.indexOf('jumpcloud') >= 0) { QV('auth-jumpcloud', true); }
|
if (authStrategies.indexOf('jumpcloud') >= 0) { QV('auth-jumpcloud', true); }
|
||||||
|
if (authStrategies.indexOf('intel') >= 0) { QV('auth-intel', true); }
|
||||||
|
if (authStrategies.indexOf('saml') >= 0) { QV('auth-saml', true); }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display the welcome text
|
// Display the welcome text
|
||||||
|
108
webserver.js
108
webserver.js
@ -1783,7 +1783,12 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
|||||||
if ((req.user.email != null) && (req.user.email != user.email)) { user.email = req.user.email; user.emailVerified = true; userChange = true; }
|
if ((req.user.email != null) && (req.user.email != user.email)) { user.email = req.user.email; user.emailVerified = true; userChange = true; }
|
||||||
if (userChange) {
|
if (userChange) {
|
||||||
obj.db.SetUser(user);
|
obj.db.SetUser(user);
|
||||||
// TODO: Event user change
|
|
||||||
|
// Event user creation
|
||||||
|
var targets = ['*', 'server-users'];
|
||||||
|
var event = { etype: 'user', userid: user._id, username: user.name, account: obj.CloneSafeUser(user), action: 'accountchange', msg: 'Account changed', domain: domain.id };
|
||||||
|
if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to create the user. Another event will come.
|
||||||
|
parent.DispatchEvent(targets, obj, event);
|
||||||
}
|
}
|
||||||
parent.debug('web', 'handleStrategyLogin: succesful login: ' + userid);
|
parent.debug('web', 'handleStrategyLogin: succesful login: ' + userid);
|
||||||
req.session.userid = req.user.id;
|
req.session.userid = req.user.id;
|
||||||
@ -2111,12 +2116,13 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
|||||||
// See what authentication strategies we have
|
// See what authentication strategies we have
|
||||||
var authStrategies = [];
|
var authStrategies = [];
|
||||||
if (typeof domain.authstrategies == 'object') {
|
if (typeof domain.authstrategies == 'object') {
|
||||||
if ((typeof domain.authstrategies.twitter == 'object') && (typeof domain.authstrategies.twitter.clientid == 'string') && (typeof domain.authstrategies.twitter.clientsecret == 'string')) { authStrategies.push('twitter'); }
|
if (typeof domain.authstrategies.twitter == 'object') { authStrategies.push('twitter'); }
|
||||||
if ((typeof domain.authstrategies.google == 'object') && (typeof domain.authstrategies.google.clientid == 'string') && (typeof domain.authstrategies.google.clientsecret == 'string')) { authStrategies.push('google'); }
|
if (typeof domain.authstrategies.google == 'object') { authStrategies.push('google'); }
|
||||||
if ((typeof domain.authstrategies.github == 'object') && (typeof domain.authstrategies.github.clientid == 'string') && (typeof domain.authstrategies.github.clientsecret == 'string')) { authStrategies.push('github'); }
|
if (typeof domain.authstrategies.github == 'object') { authStrategies.push('github'); }
|
||||||
if ((typeof domain.authstrategies.reddit == 'object') && (typeof domain.authstrategies.reddit.clientid == 'string') && (typeof domain.authstrategies.reddit.clientsecret == 'string')) { authStrategies.push('reddit'); }
|
if (typeof domain.authstrategies.reddit == 'object') { authStrategies.push('reddit'); }
|
||||||
if ((typeof domain.authstrategies.jumpcloud == 'object')) { authStrategies.push('jumpcloud'); }
|
if (typeof domain.authstrategies.intel == 'object') { authStrategies.push('intel'); }
|
||||||
if ((typeof domain.authstrategies.intel == 'object') && (typeof domain.authstrategies.intel.clientid == 'string') && (typeof domain.authstrategies.intel.clientsecret == 'string')) { authStrategies.push('intel'); }
|
if (typeof domain.authstrategies.jumpcloud == 'object') { authStrategies.push('jumpcloud'); }
|
||||||
|
if (typeof domain.authstrategies.saml == 'object') { authStrategies.push('saml'); }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render the login page
|
// Render the login page
|
||||||
@ -4210,40 +4216,70 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
|||||||
}, handleStrategyLogin);
|
}, handleStrategyLogin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generic SAML
|
||||||
|
if (typeof domain.authstrategies.saml == 'object') {
|
||||||
|
if ((typeof domain.authstrategies.saml.cert != 'string') || (typeof domain.authstrategies.saml.idpurl != 'string')) {
|
||||||
|
console.log('ERROR: Missing SAML configuration.');
|
||||||
|
} else {
|
||||||
|
var cert = obj.fs.readFileSync(obj.path.join(obj.parent.datapath, domain.authstrategies.saml.cert));
|
||||||
|
if (cert == null) {
|
||||||
|
console.log('ERROR: Unable to read SAML IdP certificate: ' + domain.authstrategies.saml.cert);
|
||||||
|
} else {
|
||||||
|
var options = { path: url + 'auth-saml-callback', entryPoint: domain.authstrategies.saml.idpurl, issuer: 'meshcentral' };
|
||||||
|
if (typeof domain.authstrategies.saml.entityid == 'string') { options.issuer = domain.authstrategies.saml.entityid; }
|
||||||
|
options.cert = cert.toString().split('-----BEGIN CERTIFICATE-----').join('').split('-----END CERTIFICATE-----').join('');
|
||||||
|
const SamlStrategy = require('passport-saml').Strategy;
|
||||||
|
passport.use(new SamlStrategy(options,
|
||||||
|
function (profile, done) {
|
||||||
|
if (typeof profile.nameID != 'string') { return done(); }
|
||||||
|
var user = { id: 'user/' + domain.id + '/~' + profile.issuer + ':' + profile.nameID, name: profile.nameID };
|
||||||
|
if ((typeof profile.firstname == 'string') && (typeof profile.lastname == 'string')) { user.name = profile.firstname + ' ' + profile.lastname; }
|
||||||
|
if (typeof profile.email == 'string') { user.email = profile.email; }
|
||||||
|
return done(null, user);
|
||||||
|
}
|
||||||
|
));
|
||||||
|
obj.app.get(url + 'auth-saml', function (req, res, next) {
|
||||||
|
domain.passport.authenticate('saml', { failureRedirect: '/', failureFlash: true })(req, res, next);
|
||||||
|
});
|
||||||
|
obj.app.post(url + 'auth-saml-callback', function (req, res, next) {
|
||||||
|
domain.passport.authenticate('saml', { failureRedirect: '/', failureFlash: true })(req, res, next);
|
||||||
|
}, handleStrategyLogin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// JumpCloud
|
// JumpCloud
|
||||||
if (typeof domain.authstrategies.jumpcloud == 'object') {
|
if (typeof domain.authstrategies.jumpcloud == 'object') {
|
||||||
const SamlStrategy = require('passport-saml').Strategy;
|
if ((typeof domain.authstrategies.jumpcloud.cert != 'string') || (typeof domain.authstrategies.jumpcloud.idpurl != 'string')) {
|
||||||
|
console.log('ERROR: Missing JumpCloud configuration.');
|
||||||
var options = {
|
} else {
|
||||||
path: url + 'auth-jumpcloud-callback',
|
|
||||||
entryPoint: domain.authstrategies.jumpcloud.idpurl,
|
|
||||||
issuer: 'passport-saml'
|
|
||||||
};
|
|
||||||
|
|
||||||
if (domain.authstrategies.jumpcloud.cert) {
|
|
||||||
var cert = obj.fs.readFileSync(obj.path.join(obj.parent.datapath, domain.authstrategies.jumpcloud.cert));
|
var cert = obj.fs.readFileSync(obj.path.join(obj.parent.datapath, domain.authstrategies.jumpcloud.cert));
|
||||||
if (cert != null) { options.cert = cert.toString().split('-----BEGIN CERTIFICATE-----').join('').split('-----END CERTIFICATE-----').join(''); }
|
if (cert == null) {
|
||||||
//console.log(options);
|
console.log('ERROR: Unable to read JumpCloud IdP certificate: ' + domain.authstrategies.jumpcloud.cert);
|
||||||
}
|
} else {
|
||||||
|
var options = { path: url + 'auth-jumpcloud-callback', entryPoint: domain.authstrategies.jumpcloud.idpurl, issuer: 'meshcentral' };
|
||||||
passport.use(new SamlStrategy(options,
|
if (typeof domain.authstrategies.jumpcloud.entityid == 'string') { options.issuer = domain.authstrategies.jumpcloud.entityid; }
|
||||||
function (profile, done) {
|
options.cert = cert.toString().split('-----BEGIN CERTIFICATE-----').join('').split('-----END CERTIFICATE-----').join('');
|
||||||
//var user = { id: 'user/' + domain.id + '/~reddit:' + profile.id, name: profile.name };
|
const SamlStrategy = require('passport-saml').Strategy;
|
||||||
//if ((typeof profile.emails == 'object') && (profile.emails[0] != null) && (typeof profile.emails[0].value == 'string')) { user.email = profile.emails[0].value; }
|
passport.use(new SamlStrategy(options,
|
||||||
console.log('JumpCloud Profile', profile);
|
function (profile, done) {
|
||||||
var user = { id: 'user/' + domain.id + '/~jumpcloud:' + profile.id, name: profile.name };
|
if (typeof profile.nameID != 'string') { return done(); }
|
||||||
return done(null, user);
|
var user = { id: 'user/' + domain.id + '/~' + profile.issuer + ':' + profile.nameID, name: profile.nameID };
|
||||||
|
if ((typeof profile.firstname == 'string') && (typeof profile.lastname == 'string')) { user.name = profile.firstname + ' ' + profile.lastname; }
|
||||||
|
if (typeof profile.email == 'string') { user.email = profile.email; }
|
||||||
|
return done(null, user);
|
||||||
|
}
|
||||||
|
));
|
||||||
|
obj.app.get(url + 'auth-jumpcloud', function (req, res, next) {
|
||||||
|
domain.passport.authenticate('saml', { failureRedirect: '/', failureFlash: true })(req, res, next);
|
||||||
|
});
|
||||||
|
obj.app.post(url + 'auth-jumpcloud-callback', function (req, res, next) {
|
||||||
|
domain.passport.authenticate('saml', { failureRedirect: '/', failureFlash: true })(req, res, next);
|
||||||
|
}, handleStrategyLogin);
|
||||||
}
|
}
|
||||||
));
|
}
|
||||||
obj.app.get(url + 'auth-jumpcloud', function (req, res, next) {
|
|
||||||
console.log('auth-jumpcloud');
|
|
||||||
domain.passport.authenticate('saml', { failureRedirect: '/', failureFlash: true })(req, res, next);
|
|
||||||
});
|
|
||||||
obj.app.get(url + 'auth-jumpcloud-callback', function (req, res, next) {
|
|
||||||
console.log('auth-jumpcloud-callback');
|
|
||||||
domain.passport.authenticate('saml', { failureRedirect: '/', failureFlash: true })(req, res, next);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server redirects
|
// Server redirects
|
||||||
|
Loading…
x
Reference in New Issue
Block a user