...
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 | ||||
---|---|---|---|---|
| ||||
<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 | ||||
---|---|---|---|---|
| ||||
<?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(/:/g,":");
var errorurl = "<shibmlp errorURL/>";
var now = "<shibmlp now/>";
// Replace & #58; with : (shibmlp variables are html-encoded)
now = now.replace(/:/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 | ||||
---|---|---|---|---|
| ||||
<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 | ||||
---|---|---|---|---|
|
...
...
<?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(/:/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>
|
...