Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Utökad hantering av errorURL

Se SAML V2.0 Metadata Deployment Profile for errorURL Version 1.0 för definitionen av den utökade hanteringen av errorURL.

...

https://administrationsverktyg.umu.se/ErrorUrl/?errorurl_code=IDENTIFICATION_FAILURE&errorurl_ts=1607969220&errorurl_rp=https://www.student.ladok.se/student-sp&errorurl_tid=ERRORURL_TID&errorurl_ctx=norEduPersonNIN

Interna felmeddelanden via Shibboleth Service Provider

Shibboleth Service Provider kan hantera vissa hindrande inloggningsrelaterade problem internt. I fallet problem med autentisering/authnContextClass så måste felmeddelandet hanteras inne i Shibboleth. För hantering av saknade attribut är den inbyggda "AttributeChecker Handler" ett alternativ till hantering av detta i tjänsten. Mer information om detta finns på https://wiki.shibboleth.net/confluence/display/SP3/Errors.

Misslyckad autentisering

Vid misslyckad autentisering hos identitetsutfärdaren på grund av exempel felaktigt lösenord så stannar användaren normalt hos identitetsutfärdaren och denne får hantera eventuella felmeddelanden och rekommentationer till användaren. I de fall tjänsten begär en autentisering med en specifik authnContextClass (exempelvis https://refeds.org/profile/mfa) som inte identitetsutfärdaren kan uppfylla så skickas dock normalt användaren tillbaka till tjänsten med ett SAML-fel. Detta hanteras internt i Shibboleth Service Provider som ett sessionsfel, dock så följer information från inloggningsbegäran inte med till hanteringssidan för sessionsfel. En bättre lösning för hantering av detta är Redirection-metoden (se länken till Shibboleth SP:s dokumentation ovan) och låta den landa i applikationen som sedan dels i användarens webbsession kan veta att en MFA-inloggning påbörjats och sedan kunna tolka felet den får som parametrar av Redirection i Shibboleth Service Provider. Nedan följer ett exempel på en enklare metod för detta som hanteras helt av Shibboleth.

Sessionsfel hanteras av den template som definieras i shibboleth.xml:

Code Block
languagexml
titleshibboleth2.xml
<Errors supportContact="root@localhost"
        helpLocation="/about.html"
        styleSheet="/shibboleth-sp/main.css"
        session="sessionError.html" />

Shibboleth tillåter ett par macron i templates. Den är dock ganska begränsad och kan kompletteras med javascript. Exempel som hänvisar användaren till identitetsutfärdarens errorURL när autentisering misslyckas, sannolikt på grund av misslyckad MFA-autentisering. Denna gissning bygger på att eventType är Login och att SAML-felkoden är något av AuthnFailed, NoPassive, NoAuthnContext eller RequestDenied.

Code Block
languagexml
titlesessionError.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <link rel="stylesheet" type="text/css" href="<shibmlp styleSheet/>" />
  <title>Session Error</title>
</head>
<body>

<h1>Ett fel uppstod i sessionen</h1>

<script>
    var eventtype = '<shibmlp eventType/>';

    var statuscode2 = '<shibmlp statusCode2/>';
    // Replace & #58; with : (shibmlp variables are html-encoded)
    statuscode2 = statuscode2.replace(/&#58;/g,":");

    var errorurl = "<shibmlp errorURL/>";

    var now = "<shibmlp now/>";
    // Replace & #58; with : (shibmlp variables are html-encoded)
    now = now.replace(/&#58;/g, ":");

    var ts = Date.parse(now)/1000;

    if (errorurl !== null && errorurl !== ''){
        if (eventtype === "Login"  && (
                statuscode2 === "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed" ||
                statuscode2 === "urn:oasis:names:tc:SAML:2.0:status:NoPassive" ||
                statuscode2 === "urn:oasis:names:tc:SAML:2.0:status:NoAuthnContext" ||
                statuscode2 === "urn:oasis:names:tc:SAML:2.0:status:RequestDenied")) {
            errorurl = errorurl.replace(/ERRORURL_CODE/, "AUTHENTICATION_FAILURE");
            errorurl = errorurl.replace(/ERRORURL_TS/, ts);
            errorurl = errorurl.replace(/ERRORURL_RP/, "ERRORURL_RP");
            errorurl = errorurl.replace(/ERRORURL_CTX/, "https://refeds.org/profile/mfa");

            var errorurl_short = errorurl.replace(/\?.*/, "");
            document.write('<p>Er inloggningstjänst tillhandahåller en informationssida som ni uppmanas använda för att lösa detta problem: <a href="' + errorurl + '">' + errorurl_short + '</a>.');
        }
    } else {
        document.write('<p>Kontakta din inloggningstjänst för felsökning.');
    }
</script>

<p>
Teknisk information:
<p><font size="-1"><pre>
<shibmlp errorType/> at (<shibmlp requestURL/>)
<shibmlp errorText/>
<shibmlpif statusCode>
Error from identity provider:
Status: <shibmlp statusCode/>
<shibmlpif statusCode2>
Sub-Status: <shibmlp statusCode2/>
</shibmlpif>
<shibmlpif statusMessage>
Message: <shibmlp statusMessage/>
</shibmlpif>
</shibmlpif>
</pre>
</body>
</html>

AttributeChecker

AttributeChecker aktiveras i shibboleth.xml. Exempel med krav på attributet norEduPersonNIN:

Code Block
languagexml
titleshibboleth2.xml
<Handler type="AttributeChecker" Location="/AttrChecker" template="attrChecker.html"
         attributes="norEduPersonNIN" flushSession="true"/>

Shibboleth tillåter ett par macron i templates. Den är dock ganska begränsad och kan kompletteras med javascript. Exempel

...

som hänvisar användaren till identitetsutfärdarens errorURL när attributet norEduPersonNIN saknas:

Code Block
languagexml
titleattrChecker.html

...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <link rel="stylesheet" type="text/css" href="<shibmlp styleSheet/>" />
  <title>Din identitetsutfärdare skickade ingen identitet</title>
</head>
<body>

<shibmlpif entityID>
<h1>Din identitetsutfärdare skickade ingen identitet</h1>

Ingen identitet skickades med när du loggade in i Ladok för studenter. Kontakta helpdesk, service desk, IT-support eller motsvarande för er inloggningstjänst för hjälp.

<script>
    var missing_attributes = "<shibmlpifnot norEduPersonNIN>norEduPersonNIN </shibmlpifnot>";
</script>

<shibmlpif 

...

errorURL>
<p>
Er inloggningstjänst tillhandahåller en informationssida som ni uppmanas använda för att lösa detta problem:
<script>
    var errorurl = "<shibmlp 

...

errorURL />";
    var now = "<shibmlp now />";
    now = now.replace(/&#58;/g, ":");
    var ts = Date.parse(now)/1000;

    if (errorurl) 
    {
        errorurl = errorurl.replace(/ERRORURL_CODE/, "IDENTIFICATION_FAILURE");
        errorurl = errorurl.replace(/ERRORURL_TS/, ts);
        errorurl = errorurl.replace(/ERRORURL_RP/, "<shibmlp target />");
        errorurl = errorurl.replace(/ERRORURL_CTX/, missing_attributes + "http://www.geant.net/uri/dataprotection-code-of-conduct/v1");

        var errorurl_short = errorurl.replace(/\?.*/, "");

        document.write('<a href="' + errorurl + '">' + errorurl_short + '</a>.');
    }
</script>
</shibmlpif>

<p>
Teknisk information: <script>document.write(missing_attributes);</script> saknas
</shibmlpif>

<shibmlpifnot entityID>
<h1>Session invalidated</h1>
<p>Your session was already invalidated before your information could
 be examined for completeness.</p>
</shibmlpifnot>

</body>
</html>

...