KNF:Single Sign On query: verschil tussen versies

Uit Kennisnet Developers Documentatie
Naar navigatie springen Naar zoeken springen
Regel 50: Regel 50:
   
 
===Voorbeeld implementatie===
 
===Voorbeeld implementatie===
 
====SSO query====
 
 
<syntaxhighlight lang="HTML">
 
<syntaxhighlight lang="HTML">
 
<html>
 
<html>

Versie van 20 apr 2020 10:39

Nl.gif Nederlands En.gif English
Warn.gif Met ingang van 1 juli 2019 maakt Entree Federatie gebruik van een nieuw Endpoint voor de SSO query. Per 1 september 2020 zal het oude endpoint uitgezet worden.

Inleiding

De Single Sign On-query kan worden gebruikt door Service Provider om te detecteren of een gebruiker reeds een lopende SSO sessie via Entree Federatie heeft.

Om te authentiseren, moet de gebruiker op de website op de knop "Inloggen" klikken, waardoor het authenticatieproces via Entree Federatie start. Als de gebruiker echter al een geldige Single Sign On-sessie met Entree Federatie heeft, zal het inloggen onmiddellijk zonder gebruikersinteractie (bijv. het invoeren van een gebruikersnaam en wachtwoord) gebeuren. Het klikken op de knop "Inloggen" is dus overbodig dat en daarom minder gebruiksvriendelijk.

Om dit scenario te voorkomen, kan de Service Provider een detectiemechanisme implementeren dat automatisch gebruikers met een geldige SSO-sessie herkent. Dit kan worden bereikt met de Single Sign On-query.

Let op:
Om misbruik van deze functionaliteit te voorkomen dient het domein opgenomen te worden in de whitelist van Entree Federatie. Neem daarom contact op met Kennisnet als je gebruik wilt maken van SSO query.

Zodra de vraag aan de Entree Federatie gesteld wordt, kunnen er drie antwoorden worden geven op de SSOQuery:

false
De gebruiker heeft geen SSO sessie en is voor zover bekend bij de Entree Federatie nergens ingelogd. Het is dus onbekend of de gebruiker wel of niet kan inloggen via Entree Federatie.
true
De gebruiker heeft een SSO sessie en kan inloggen zonder gebruikersinteractie
remote
De gebruiker heeft geen SSO sessie, maar er is wel een SSO notificatie cookie gevonden. De gebruiker is al ingelogd bij zijn eigen Identity Provider en kan hoogstwaarschijnlijk inloggen zonder gebruikersinteractie

Implementatie

De query bestaat uit een HTTP GET request met twee parameters:

  • response_url: deze parameter moet in de URL worden URL encoded/UTF-8
  • format: deze optionele parameter kan gebruikt worden om het antwoord in json format te ontvangen


De volgende urls kunnen worden gebruikt:

Staging omgeving:
https://ssoquery.aselect-s.entree.kennisnet.nl/openaselect/sso/ssoquery?response_url=<URL>
Productie omgeving:
https://ssoquery.aselect.entree.kennisnet.nl/openaselect/sso/ssoquery?response_url=<URL>

Voorbeeld

De Service Provider stelt de vraag
https://ssoquery.aselect.entree.kennisnet.nl/openaselect/sso/ssoquery?response_url=https%3A%2F%2Ftestapplicatie.kennisnet.nl
Entree Federatie redirect naar de opgegeven response URL
https://testapplicatie.kennisnet.nl?result=true


Voorbeeld implementatie

<html>
   <script>
      var ssoQuery= 'https://ssoquery.aselect-s.entree.kennisnet.nl/openaselect/sso/ssoquery?response_url=https://domeinnaam&format=json';

      function isLoggedIn() {
         var xhr = new XMLHttpRequest();
         xhr.open("GET", ssoQuery, true);
         xhr.withCredentials = true;
         xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
               if (xhr.status === 200 && JSON.parse(xhr.responseText)['result'] === 'true') {
                  <!-- de gebruiker heeft reeds een lopende SSO sessie via Entree Federatie en kan direct worden ingelogd -->
                  window.location.href = ''; <!-- redirect naar de pagina waar uw applicatie het authenticatieverzoek naar Entree Federatie verstuurd -->
               } else {
                  <!-- de gebruiker heeft nog geen lopende SSO sessie via Entree Federatie en gebruikersinteractie is vereist -->
                  window.location.href = ''; <!-- redirect de gebruiker naar de inlogpagina van uw applicatie -->
               }
            }
         };
         xhr.ontimeout = function () {
            <!-- redirect de gebruiker in geval van een timeout van de SSO query service naar de inlogpagina van uw applicatie
            window.location.href = ''; <!-- redirect de gebruiker naar de inlogpagina van uw applicatie -->
         };
         xhr.send();
      }
      isLoggedIn();
   </script>
</html>