FCLT#53818 Logcentre link met SSO vanuit klant FACILITOR
svn path=/Website/branches/v2018.2/; revision=39918
This commit is contained in:
@@ -1011,7 +1011,7 @@ function jwt_verify(decoded_jwt, secret, skew, duration)
|
||||
}
|
||||
|
||||
if (claim.payload.exp && now > claim.payload.exp + skew) {
|
||||
return { err: 'Token expired' };
|
||||
return { err: 'Token expired at {0}'.format(toISODateTimeString(new Date(claim.payload.exp * 1000), true)) };
|
||||
}
|
||||
|
||||
// Onze eigen duration/expiration controleren we ook nog
|
||||
@@ -1019,7 +1019,7 @@ function jwt_verify(decoded_jwt, secret, skew, duration)
|
||||
__DoLog("Token expired. Now is {0}, got {1}, skew {2}".format(toISODateTimeString(new Date(now * 1000), true),
|
||||
toISODateTimeString(new Date(claim.payload.iat * 1000), true),
|
||||
skew));
|
||||
return { err: 'Token expired' };
|
||||
return { err: 'Token expired at {0}'.format(toISODateTimeString(new Date((claim.payload.iat + duration) * 1000), true)) };
|
||||
}
|
||||
if (claim.payload.iat > now + skew) {
|
||||
__DoLog("Token not yet active. Now is {0}, got {1}, skew {2}".format(toISODateTimeString(new Date(now * 1000), true),
|
||||
@@ -1080,7 +1080,7 @@ function trySSO(ssocode)
|
||||
var issuer = oRs("aut_idp_issuer").Value;
|
||||
var url = oRs("aut_idp_remote_loginurl").Value;
|
||||
if (!url) // regulier bij Logcenter-sso CUSTOMER als gebruiker (nog) niet bekend is
|
||||
shared.internal_error("User unknown and Identity Provider '{0}' has no login url".format(ssocode));
|
||||
shared.internal_error("User unknown and Identity Provider '{0}' has no Remote Login URL".format(ssocode));
|
||||
if (url.indexOf("://") < 0) // geen protocol?
|
||||
url = HTTP.urlzelf() + "/" + url;
|
||||
url += (url.indexOf("?")>=0?"&":"?") + "aud=" + safe.url(audience) + "&iss=" + safe.url(issuer) ;
|
||||
@@ -1124,8 +1124,12 @@ function process_claim(claim, idp_data, params)
|
||||
if (!claim[idpm.from]) // niet meegegeven
|
||||
continue;
|
||||
if (idpm.identify == 1)
|
||||
{
|
||||
if (idpm.name.id == 21) // afdeling doen we apart
|
||||
continue;
|
||||
hasIdentifyVal = true;
|
||||
switch (idpm.name.id)
|
||||
}
|
||||
switch (idpm.name.id) // zie model_aut_idp_map.inc voor codering
|
||||
{
|
||||
case 1: // login
|
||||
settings.overrule_setting("login_use_email", 0);
|
||||
@@ -1135,7 +1139,7 @@ function process_claim(claim, idp_data, params)
|
||||
settings.overrule_setting("login_use_email", 1);
|
||||
tryLogin(claim[idpm.from], null, { noPassword: true, idp_code: idp_data.code, stateless: params.by_bearer, isFACFACinternal: isFACFACinternal });
|
||||
break;
|
||||
case 12: // externalid
|
||||
case 12: // externalid
|
||||
var sql = "SELECT pp.prs_perslid_key"
|
||||
+ " FROM prs_perslid pp"
|
||||
+ " WHERE prs_perslid_verwijder IS NULL"
|
||||
@@ -1176,22 +1180,75 @@ function process_claim(claim, idp_data, params)
|
||||
{
|
||||
shared.auditfail(L("lcl_autfai_loginnotfound").format(idpm.name.name, idpm.from, claim[idpm.from]));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (idp_data.authorization && !user.has(idp_data.authorization.id))
|
||||
{
|
||||
doLogoff();
|
||||
shared.simpel_page(L("lcl_no_auth"))
|
||||
}
|
||||
break; // ingelogd, niet verder zoeken
|
||||
}
|
||||
|
||||
break; // ingelogd, niet verder zoeken
|
||||
// We zijn nu in principe ingelogd maar er kunnen nog extra voorwaarden zijn waarom het toch niet mag
|
||||
// Dan wordt je alsnog uitgelogd
|
||||
var alles_ok = user_key > 0;
|
||||
if (alles_ok && idp_data.authorization && !user.has(idp_data.authorization.id)) // gebruiker moet deze autorisatie hebben
|
||||
alles_ok = false;
|
||||
|
||||
if (alles_ok)
|
||||
{
|
||||
for (var i = 0; i < idp_data.idpmappings.length; i++)
|
||||
{
|
||||
var idpm = idp_data.idpmappings[i];
|
||||
// 21=afdeling, deze is van zichzelf niet identificerend genoeg,
|
||||
// we controleren dat je er *ook* onder moet vallen
|
||||
if (idpm.name.id == 21 && idpm.identify == 1)
|
||||
{
|
||||
var IdentifyDept = claim[idpm.from];
|
||||
// Zoek afdeling eerst op
|
||||
var sql = "SELECT prs_afdeling_key"
|
||||
+ " FROM prs_v_afdeling"
|
||||
+ " WHERE prs_afdeling_verwijder IS NULL"
|
||||
+ " AND prs_afdeling_upper = " + safe.quoted_sql_upper(IdentifyDept);
|
||||
if (idp_data.company)
|
||||
sql += " AND prs_bedrijf_key = " + idp_data.company.id;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
if (oRs.EOF)
|
||||
{
|
||||
__DoLog("Claimed department {0} not found".format(IdentifyDept), "#ff8800");
|
||||
alles_ok = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
var afd_key = oRs("prs_afdeling_key").Value;
|
||||
oRs.MoveNext();
|
||||
if (!oRs.EOF)
|
||||
{
|
||||
__DoLog("Claimed department {0} not unique".format(IdentifyDept), "#ff8800");
|
||||
alles_ok = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
var sql = "SELECT ab.prs_bedrijf_key"
|
||||
+ " FROM prs_v_afdeling_boom ab"
|
||||
+ " WHERE ab.prs_afdeling_key = " + user.prs_afdeling_key()
|
||||
+ " AND ab.prs_afdeling_key1 = " + afd_key;
|
||||
var oRs2 = Oracle.Execute(sql);
|
||||
if (oRs2.EOF)
|
||||
{
|
||||
__DoLog("User is not a member of department {0}".format(IdentifyDept), "#ff8800");
|
||||
alles_ok = false;
|
||||
}
|
||||
oRs2.close();
|
||||
}
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!alles_ok)
|
||||
{
|
||||
doLogoff(); // Toch maar niet
|
||||
}
|
||||
|
||||
if (!hasIdentify)
|
||||
shared.internal_error("IdP {0} has no identifying attribute defined.".format(idp_data.code));
|
||||
if (!hasIdentifyVal)
|
||||
shared.internal_error("IdP {0} has not supplied a value for any identifying attribute.".format(idp_data.code));
|
||||
|
||||
shared.internal_error("IdP {0} has not supplied a value for any identifying attribute.".format(idp_data.code));
|
||||
|
||||
if ( user_key < 0 && idp_data.autocreate.id & 1 // Misschien dan maar aanmaken?
|
||||
|| user_key > 0 && idp_data.autocreate.id & 2 // en/ of bijwerken
|
||||
|
||||
@@ -16,16 +16,17 @@
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<%
|
||||
user.checkAutorisation("WEB_PRSSYS"); // we zijn nog streng
|
||||
if (!user.prs_perslid_email())
|
||||
shared.internal_error("User needs to have an e-mail address");
|
||||
|
||||
var logcenterurl = S("logcenter_url"); // "http://fclt.facws001/branch20162/"; //
|
||||
var logcenterurl = S("logcenter_url"); // "http://logc.facws001.sg.nl/branch20182/"; om te testen
|
||||
var config = {
|
||||
aud: "fclt.facilitor.nl",
|
||||
aud: "logc.facilitor.nl",
|
||||
iss: "FACILITOR",
|
||||
secret: S("logcenter_secret")
|
||||
}
|
||||
}
|
||||
|
||||
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
|
||||
|
||||
var header =
|
||||
{
|
||||
"typ":"JWT",
|
||||
|
||||
Reference in New Issue
Block a user