...
Vid federerad inloggning med SAML finns en funktion för att möjliggöra för tjänster att hänvisa användare som har hindrande inloggningsproblem tillbaka till hjälpsidor hos användarens organisation. Samtliga identitetsutfärdare (IdP) i SWAMID har en "errorURL" i metadatan med information om hur användare ska lösa hindrande inloggningsrelaterade problem. Tidigare har bara en generell webbadress kunnat konfigureras som "errorURL" för en identitetsutfärdare som då behöver täcka alla olika typer av fel. Under 2020 kompletterades detta med en utökning som gör att tjänster kan hänvisa användare till mer specifika informationssidor hos användarens organisation vid olika typer av fel för att bättre kunna hjälpa användaren att lösa hindrande inloggningsproblem.
Info | ||
---|---|---|
| ||
Sedan mars 2021 har samtliga identitetsutfärdare i SWAMID en registrerad errorURL. En del identitetsutfärdare använder traditionellt enkel errorURL men de flesta använder idag nedanstående beskrivna utökade hantering. |
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://saml-error.example.com/?errorurl_code=AUTHORIZATION_FAILURE&errorurl_ts=1607969220&errorurl_rp=https://www.student.ladok.se/student-sp&errorurl_tid=error-5fd7a9c448086&errorurl_ctx=http%3A%2F%2Fwww.swamid.se%2Fpolicy%2Fassurance%2Fal2
Där kan då identitetsutfärdaren beskriva för användaren hur denne löser det uppkomna problemet, t.ex. bekräfta sin identitet för att uppnå tillräcklig nivå inkl. detaljerad information om hur användare gör det.
...
- Namn på tjänst (gärna DisplayName från MDUI-metadata för tjänsten): Ladok för studenter
- entityID för tjänsten: https://www.student.ladok.se/student-sp
- errorURL för användarens identitetsutfärdare: https://administrationsverktyg.umu.se/ErrorUrl/?errorurl_code=ERRORURL_CODE&errorurl_ts=ERRORURL_TS&errorurl_rp=ERRORURL_RP&errorurl_tid=ERRORURL_TID&errorurl_ctx=ERRORURL_CTX
- Då det i det här fallet är behörighet som saknas så är det felkategori AUTHORIZATION_FAILURE som passar
Säkerhetskrav uppfylls ej
Ni har loggat in i Ladok för studenter med en användare som inte uppfyller aktuella säkerhetskrav. För att använda Ladok för studenter behöver ni bekräfta er användaridentitet. Kontakta helpdesk, service desk, IT-support eller motsvarande för er inloggningstjänst för hjälp.
Er inloggningstjänst tillhandahåller en informationssida som ni uppmanas använda för att lösa detta problem: https://administrationsverktyg.umu.se/ErrorURL/
Aktuella säkerhetskrav: SWAMID Identity Assurance Level 2 Profile
Länken ska konstrueras enligt följande:
Hämta identitetsutfärdarens errorURL från dess metadata
Ersätt ERRORURL_CODE med AUHORIZATION_FAILURE
Ersätt ERRORURL_TS med aktuell tid, på formen unix time, exempelvis 1616057384
Ersätt ERRORURL_RP med tjänstens entityID, exempelvis https://www.student.ladok.se/student-sp
Ersätt ERRORURL_TID med en intern transaktionsidentifierare, om det skulle underlätta eventuell felsökning i kommunikation med tjänstens support
Ersätt ERRORURL_CTX med http://www.swamid.se/policy/assurance/al2
- Visa länken för användaren med eventuella parametrar bortklippta
Resulterande länk skulle exempelvis kunna bli denna:
https://administrationsverktyg.umu.se/ErrorUrl/?errorurl_code=AUTHORIZATION_FAILURE&errorurl_ts=1607969220&errorurl_rp=https://www.student.ladok.se/student-sp&errorurl_tid=ERRORURL_TID&errorurl_ctx=http%3A%2F%2Fwww.swamid.se%2Fpolicy%2Fassurance%2Fal2
Inloggning i en tjänst som kräver personnummer för identifiering av användare men som inte får det
Personnummer används som identifierande attribut i många tjänster i SWAMID, bland annat kontoaktiveringsportaler, Ladok och Antagning.se. Inom de flesta studieadministrativa systemen används attributet norEduPersonNIN för överföring av personnummer. Andra tjänster använder normalt personalIdentityNumber.
Info | ||
---|---|---|
| ||
Det finns ett specialfall inom SWAMID där just norEduPersonNIN har använts för att indikera att identitetsutfärdaren med stor tillförlitlighet vet vilken personen bakom ett användarkonto är. Detta har då använts för att signalera att identiteten är "bekräftad". I och med tillitsprofilen SWAMID Identity Assurance Level 2 Profile så planeras detta fasas ut. |
I de fall personnummer saknas så är det lämpligt att tjänsten meddelar detta, och också ger stöd till användaren i kommunikationen med sin identitetsutfärdare (IdP).
Förslag på text, tillsammans med en länk till identitetsutfärdarens errorURL (i förekommande fall) med dessa förutsättningar:
- Attribut som saknas: norEduPersonNIN
- Namn på tjänst (gärna DisplayName från MDUI-metadata för tjänsten): Ladok för studenter
- entityID för tjänsten: https://www.student.ladok.se/student-sp
- errorURL för användarens identitetsutfärdare: https://administrationsverktyg.umu.se/ErrorUrl/?errorurl_code=ERRORURL_CODE&errorurl_ts=ERRORURL_TS&errorurl_rp=ERRORURL_RP&errorurl_tid=ERRORURL_TID&errorurl_ctx=ERRORURL_CTX
- Tjänsten använder entitetskategorin GÉANT Dataprotection Code of Conduct för överföring av attribut
- Då det i det här fallet är identifierande attribut som saknas så är det felkategori IDENTIFICATION_FAILURE som passar
Din identitetsutfärdare skickade ingen identitet
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.
Er inloggningstjänst tillhandahåller en informationssida som ni uppmanas använda för att lösa detta problem: https://administrationsverktyg.umu.se/ErrorURL/
Teknisk information: norEduPersonNIN (personnummer) saknas
Länken ska konstrueras enligt följande:
Hämta identitetsutfärdarens errorURL från dess metadata
Ersätt ERRORURL_CODE med IDENTIFICATION_FAILURE
Ersätt ERRORURL_TS med aktuell tid, på formen unix time, exempelvis 1616057384
Ersätt ERRORURL_RP med tjänstens entityID, exempelvis https://www.student.ladok.se/student-sp
Ersätt ERRORURL_TID med en intern transaktionsidentifierare, om det skulle underlätta eventuell felsökning i kommunikation med tjänstens support
Ersätt ERRORURL_CTX med "norEduPersonNIN http://www.geant.net/uri/dataprotection-code-of-conduct/v1"
- Visa länken för användaren med eventuella parametrar bortklippta
Resulterande länk skulle exempelvis kunna bli denna:
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>
|