KNF:SSO notificatie middels JavaScript: verschil tussen versies

Uit Kennisnet Developers Documentatie
Ga naar: navigatie, zoeken
 
(15 tussenliggende versies door 2 gebruikers niet weergegeven)
Regel 1: Regel 1:
Het SSO notificatie cookie kan geplaatst worden door, nadat de gebruiker is ingelogd in de ELO of schoolportaal, een AJAX call naar Entree Federatie uit te voeren.<br>
+
Het SSO notificatie cookie kan geplaatst worden, nadat de gebruiker is ingelogd in de ELO of schoolportaal, door een AJAX call naar Entree Federatie uit te voeren.
  +
  +
Voor de implementatie van de SSO notificatie functionaliteit kan het onderstaande script gebruikt worden. In dit script moet de waarde van twee variabelen worden aangepast:
  +
# '''eloid''': De unieke identifier waarmee de Identity Provider bekend is binnen Entree Federatie. Dit is het entityId uit de metadata van de Identity Provider. Eventueel kan de identifier ook worden opgevraagd bij [https://support.kennisnet.org/Tickets/Submit Kennisnet].
  +
# '''elourl''': De URL van de ELO of schoolportaal waar de call vandaan komt. Dit wordt in de Entree Federatie applicatie gebruikt voor verificatie.
  +
  +
'''LET OP:''' Voordat de SSO notificatie wordt geïmplementeerd moet de URL van de ELO of schoolportaal waarvandaan de call wordt uitgevoerd (zie [[KNF:SSO_notificatie_middels_JavaScript#Foutmeldingen | Foutmeldingen]]) toegevoegd worden aan de whitelist van Entree Federatie. Neem hiervoor contact op met [https://support.kennisnet.org/Tickets/Submit Kennisnet].
  +
  +
Het voorbeeld script ondersteunt zowel jQuery als native JavaScript.
   
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
<script type="text/javascript" charset="utf-8">
+
<script type="text/javascript" charset="utf-8">
var eloid = 'https://referentie-t.entree.kennisnet.nl/idp'; // EntityId
+
var eloid = ''; // EntityId
var elourl = 'https://referentie-t.entree.kennisnet.nl/referentie'; // ELO URL
+
var elourl = ''; // ELO URL
  +
  +
  +
function createCookie(name, value) {
  +
document.cookie = name + "=" + value + "; path=/";
  +
}
  +
  +
  +
function readCookie(name) {
  +
var nameEQ = name + "=";
  +
var ca = document.cookie.split(';');
  +
  +
for (var i=0;i < ca.length;i++) {
  +
var c = ca[i];
  +
while (c.charAt(0) == ' ') {
  +
c = c.substring(1,c.length);
  +
}
  +
  +
if (c.indexOf(nameEQ) == 0) {
  +
return c.substring(nameEQ.length, c.length);
  +
}
  +
}
  +
return null;
  +
}
  +
  +
  +
function setCookie() {
  +
if (readCookie('entreePrelogin') != 'true') {
  +
createCookie('entreePrelogin', 'true');
  +
setSsoNotification();
  +
}
  +
}
  +
  +
  +
function setSsoNotification() {
  +
var url = "https://aselect.entree.kennisnet.nl/openaselect/profiles/entree?id=" + eloid + "&url=" + encodeURIComponent(elourl);
  +
  +
// Check if jQuery is avaiable
  +
if (window.jQuery) {
  +
// Use jQuery to ask the Entree Federation to set a SSO Notification
  +
$.ajax({
  +
url: url,
  +
dataType: 'jsonp'
  +
}).always(function(data) {});
  +
} else {
  +
// This code can be used if no jQuery is available
  +
loadJSONP(url);
  +
}
  +
}
   
function createCookie(name, value) {
 
document.cookie = name + "=" + value + "; path=/";
 
}
 
   
  +
// This function can be used if jQuery is not available
function readCookie(name) {
 
  +
function loadJSONP(url) {
var nameEQ = name + "=";
 
var ca = document.cookie.split(';');
+
var script = document.createElement('script');
  +
script.type = 'text/javascript';
console.log(ca);
 
  +
script.src = url;
 
for (var i=0;i < ca.length;i++) {
 
var c = ca[i];
 
while (c.charAt(0) == ' ') {
 
c = c.substring(1,c.length);
 
}
 
 
if (c.indexOf(nameEQ) == 0) {
 
return c.substring(nameEQ.length, c.length);
 
}
 
}
 
 
return null;
 
}
 
 
function setCookie() {
 
if (readCookie('entreePrelogin') != 'true') {
 
createCookie('entreePrelogin', 'true');
 
setSsoNotification();
 
} else {
 
write("entreePrelogin cookie was already set!");
 
}
 
}
 
   
  +
// Setup handler
function setSsoNotification() {
 
  +
window[name] = function(data) {
var url = "https://aselect-t.entree.kennisnet.nl/openaselect/profiles/entree?id=" +
 
  +
callback.call((context || window), data);
eloid + "&url=" + encodeURIComponent(elourl);
 
  +
document.getElementsByTagName('head')[0].removeChild(script);
 
  +
script = null;
// Check if jQuery is avaiable
 
if (window.jQuery) {
+
delete window[name];
  +
};
write("Using jQuery to set SSO Notification");
 
 
// Use jQuery to ask the Entree Federation to set a SSO Notification
 
$.ajax({
 
url: url,
 
dataType: 'jsonp'
 
}).always(function(data) {
 
write("Cookie is set");
 
});
 
} else {
 
write ("Using POJO to set SSO Notification");
 
 
// This code can be used if no jQuery is available
 
loadJSONP(url);
 
write("Cookie is set");
 
}
 
}
 
 
function write(text) {
 
document.getElementById('ssonot').innerText += text + "\r\n";
 
}
 
 
// This function can be used if jQuery is not available
 
function loadJSONP(url) {
 
var script = document.createElement('script');
 
script.type = 'text/javascript';
 
script.src = url;
 
   
  +
// Load JSON
// Setup handler
 
  +
document.getElementsByTagName('head')[0].appendChild(script);
window[name] = function(data) {
 
  +
}
callback.call((context || window), data);
 
  +
</script>
document.getElementsByTagName('head')[0].removeChild(script);
 
script = null;
 
delete window[name];
 
};
 
 
// Load JSON
 
document.getElementsByTagName('head')[0].appendChild(script);
 
}
 
</script>
 
 
</syntaxhighlight>
 
</syntaxhighlight>
   

Huidige versie van 17 sep 2020 om 16:09

Het SSO notificatie cookie kan geplaatst worden, nadat de gebruiker is ingelogd in de ELO of schoolportaal, door een AJAX call naar Entree Federatie uit te voeren.

Voor de implementatie van de SSO notificatie functionaliteit kan het onderstaande script gebruikt worden. In dit script moet de waarde van twee variabelen worden aangepast:

  1. eloid: De unieke identifier waarmee de Identity Provider bekend is binnen Entree Federatie. Dit is het entityId uit de metadata van de Identity Provider. Eventueel kan de identifier ook worden opgevraagd bij Kennisnet.
  2. elourl: De URL van de ELO of schoolportaal waar de call vandaan komt. Dit wordt in de Entree Federatie applicatie gebruikt voor verificatie.

LET OP: Voordat de SSO notificatie wordt geïmplementeerd moet de URL van de ELO of schoolportaal waarvandaan de call wordt uitgevoerd (zie Foutmeldingen) toegevoegd worden aan de whitelist van Entree Federatie. Neem hiervoor contact op met Kennisnet.

Het voorbeeld script ondersteunt zowel jQuery als native JavaScript.

<script type="text/javascript" charset="utf-8">
    var eloid = '';      // EntityId
    var elourl = '';     // ELO URL


    function createCookie(name, value) {
        document.cookie = name + "=" + value + "; path=/";
    }


    function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');

        for (var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1,c.length);
            }

            if (c.indexOf(nameEQ) == 0) {
                return c.substring(nameEQ.length, c.length);
            }
        }
        return null;
    }


    function setCookie() {
        if (readCookie('entreePrelogin') != 'true') {
            createCookie('entreePrelogin', 'true');
            setSsoNotification();
        }
    }


    function setSsoNotification() {
        var url = "https://aselect.entree.kennisnet.nl/openaselect/profiles/entree?id=" +  eloid + "&url=" + encodeURIComponent(elourl);

        // Check if jQuery is avaiable
        if (window.jQuery) {
            // Use jQuery to ask the Entree Federation to set a SSO Notification
            $.ajax({
                url: url,
                dataType: 'jsonp'
                }).always(function(data) {});
        } else {
            // This code can be used if no jQuery is available
            loadJSONP(url);
        }
    }


    // This function can be used if jQuery is not available
    function loadJSONP(url) {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = url;

        // Setup handler
        window[name] = function(data) {
            callback.call((context || window), data);
            document.getElementsByTagName('head')[0].removeChild(script);
            script = null;
            delete window[name];
        };

        // Load JSON
        document.getElementsByTagName('head')[0].appendChild(script);
    }
</script>


Foutmeldingen

Als de ingestelde identifier van de IdP niet bekend is binnen Entree Federatie zal de call resulteren in een 400 HTTP status code.
Wanneer de URL waarvandaan de call gedaan wordt niet aan de whitelist van Entree Federatie is toegevoegd zal de call ook een 400 HTTP status code opleveren.
Neem in deze gevallen contact op met Kennisnet.