KNF:Single Sign On query: verschil tussen versies
(24 tussenliggende versies door 2 gebruikers niet weergegeven) | |||
Regel 1: | Regel 1: | ||
{{Talen}} |
{{Talen}} |
||
− | |||
− | {{Warn|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== |
==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. |
||
− | De SSOquery heeft als voornaamste functie het verklikken van de inlogstatus. |
||
− | Een veelgebruikte naam is dan ook wel de inlogstatusverklikker. |
||
+ | 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 en daarom minder gebruiksvriendelijk. |
||
− | Deze functie biedt de mogelijkheid om te controleren of een gebruiker direct ingelogd kan worden zonder het inlogscherm te tonen. |
||
− | Ook toegang geven tot, of het zichtbaar maken van bepaalde content behoort tot een van de gebruikte usecases. |
||
+ | 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. |
||
− | Met deze functie kan de gebruikerservaring verbeterd worden door bijvoorbeeld: |
||
− | * Een 'Inlogknop' niet te tonen en direct de authenticatie te starten met een ingelogde gebruiker als gevolg |
||
− | * Zichtbaar maken dat de gebruiker nog niet ingelogd is, maar dit wel moet doen om bepaalde content te zien |
||
'''Let op:'''<br/> |
'''Let op:'''<br/> |
||
Regel 18: | Regel 12: | ||
Neem daarom contact op met [https://support.kennisnet.org/ Kennisnet] als je gebruik wilt maken van SSO query. |
Neem daarom contact op met [https://support.kennisnet.org/ Kennisnet] als je gebruik wilt maken van SSO query. |
||
− | ==Werking== |
||
Zodra de vraag aan de Entree Federatie gesteld wordt, kunnen er drie antwoorden worden geven op de SSOQuery: |
Zodra de vraag aan de Entree Federatie gesteld wordt, kunnen er drie antwoorden worden geven op de SSOQuery: |
||
;false |
;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. |
: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 |
;true |
||
− | :De gebruiker heeft een SSO sessie en kan |
+ | :De gebruiker heeft een SSO sessie en kan inloggen zonder gebruikersinteractie |
;remote |
;remote |
||
− | :De gebruiker heeft geen SSO sessie, maar er is wel een SSO notificatie cookie gevonden. De gebruiker is al ingelogd |
+ | :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== |
==Implementatie== |
||
− | De query bestaat uit een |
+ | 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 |
||
+ | <br> |
||
De volgende urls kunnen worden gebruikt: |
De volgende urls kunnen worden gebruikt: |
||
− | {| class="wikitable" |
||
− | | Staging environment: |
||
− | |- |
||
⚫ | |||
− | |} |
||
+ | SSO Query endpoint: |
||
− | {| class="wikitable" |
||
⚫ | |||
− | | Live environment: |
||
⚫ | |||
− | |- |
||
− | + | Staging: https://ssoquery.entree-s.kennisnet.nl/sso/ssoquery?response_url=<URL> |
|
⚫ | |||
− | |} |
||
===Voorbeeld=== |
===Voorbeeld=== |
||
− | ;De |
+ | ;De Service Provider stelt de vraag: |
− | :https://ssoquery |
+ | :https://ssoquery.entree.kennisnet.nl/sso/ssoquery?response_url=https%3A%2F%2Ftestapplicatie.kennisnet.nl |
− | ;Entree Federatie redirect naar: |
+ | ;Entree Federatie redirect naar de opgegeven response URL: |
:https://testapplicatie.kennisnet.nl?result=true |
:https://testapplicatie.kennisnet.nl?result=true |
||
− | |||
− | |||
− | ===Voorbeeld implementatie=== |
||
− | |||
− | ====SSO query==== |
||
⚫ | |||
− | <html> |
||
− | <script> |
||
− | var queryUrl = 'https://ssoquery.aselect-s.entree.kennisnet.nl/openaselect/sso/ssoquery'; |
||
− | var responseUrl = 'https://domeinnaam/ssoresult.php'; |
||
− | |||
− | 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') { |
||
− | window.location.href = '/autorisaties/app.html#/home'; |
||
− | } else { |
||
− | window.location.href = '/autorisaties/login/'; |
||
− | } |
||
− | } |
||
− | }; |
||
− | xhr.ontimeout = function () { |
||
− | window.location.href = '/autorisaties/login/'; |
||
− | }; |
||
− | xhr.send(); |
||
− | } |
||
− | isLoggedIn(); |
||
− | </script> |
||
− | </html> |
||
⚫ | |||
− | |||
− | <!-- <syntaxhighlight lang="php"> |
||
− | <?php |
||
− | $query_url = 'https://ssoquery.aselect-s.entree.kennisnet.nl/openaselect/sso/ssoquery'; |
||
− | $response_url = 'https://domeinnaam/ssoresult.php'; |
||
− | |||
− | $url = $query_url . '?response_url=' . urlencode($response_url); |
||
− | |||
− | header('Location: ' . $url, 302); |
||
− | ?> |
||
− | </syntaxhighlight> --> |
||
− | |||
− | ====SSO query result==== |
||
− | <syntaxhighlight lang="php"> |
||
− | <?php |
||
− | $result = array_key_exists('result', $_GET) ? $_GET['result'] : false; |
||
− | |||
− | $resultValue = ($result === false ? '*none*' : $result); |
||
− | |||
− | ?> |
||
− | <html> |
||
− | <head> |
||
− | <title>SSO query result</title> |
||
− | </head> |
||
− | <body> |
||
− | <p>SSO query result is <?php print $resultValue; ?>.</p> |
||
− | </body> |
||
− | </html> |
||
− | </syntaxhighlight> |
||
− | |||
[[Categorie:Entree Federatie]] |
[[Categorie:Entree Federatie]] |
Huidige versie van 19 sep 2023 om 13:16
![]() |
![]() |
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 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:
SSO Query endpoint:
Productie: https://ssoquery.entree.kennisnet.nl/sso/ssoquery?response_url=<URL>
Staging: https://ssoquery.entree-s.kennisnet.nl/sso/ssoquery?response_url=<URL>
Voorbeeld
- De Service Provider stelt de vraag
- https://ssoquery.entree.kennisnet.nl/sso/ssoquery?response_url=https%3A%2F%2Ftestapplicatie.kennisnet.nl
- Entree Federatie redirect naar de opgegeven response URL
- https://testapplicatie.kennisnet.nl?result=true