Vid federerad inloggning med SAML så finns en konstruktion för att möjliggöra för tjänster att hänvisa användare som har fatala brister i sin inloggning tillbaka till hjälpsidor hos användarens inloggningstjänst. Identitetsutfärdare kan lägga in en "errorURL" i sin metadata med en länk till organisationens hjälpsidor.
Utökad hantering av errorURL
Under 2020 så utökades hanteringen av errorURL med ett tillägg som möjliggör för tjänster att hänvisa användare till olika sidor beroende på kategori av fel som uppstått vid inloggning, SAML V2.0 Metadata Deployment Profile for errorURL Version 1.0.
Felen som omfattas av errorURL-hanteringen är endast de fel som användaren förväntas kunna lösa själv eller med hjälp av sin identitetsutfärdare. De olika felkatagorierna är:
- IDENTIFICATION_FAILURE - Attribut som behövs för att identifiera användaren eller för att kunna personanpassa tjänsten saknas, exempelvis unika identifierare, namn eller e-post
- AUTHENTICATION_FAILURE - Kvalitén på autentiseringen uppfyller inte kraven som tjänsten har, exempelvis krav på tvåfaktorsautentisering
- AUTHORIZATION_FAILURE - Användaren saknar behörigheter i tjänsten, och användaren förväntas kunna åtgärda detta själv eller genom kommunikation med sin identetsutfärdare, exempelvis för låg tillitsnivå (Assurance Level), association till identitetsutfärdaren (affiliation) eller entitlements (roller i tjänsten som skickas från identitetsutfärdaren)
- OTHER_ERROR - Annat fel som användaren förväntas kunna åtgärda själv eller med hjälp av sin identitetsutfärdare
Vid användning av tillägget till errorURL så konstrueras URL:en med ett antal specifika strängar som tjänster kan byta ut till olika värden beroende på fel som uppstår vid inloggning. Den viktigaste av dessa är strängen "ERRORURL_CODE" som byts ut mot "IDENTIFICATION_FAILURE", "AUTHENTICATION_FAILURE" eller någon av de andra feltyperna.
En errorURL för en identitetsutfärdare skulle exempelvis kunna vara
https://saml-error.example.com/ERRORURL_CODE.html
Vid fel i kategorin IDENTIFICATION_FAILURE skulle då länken som tjänsten ger till användaren bli
https://saml-error.example.com/IDENTIFICATION_FAILURE.html
På denna adress kan identitetsutfärdaren beskriva hur användare som får ett fel av denna kategori bör agera för att lösa problemet.
Förutom ERRORURL_CODE så finns även dessa strängar som tjänsten kan ge lämpliga värden:
ERRORURL_TS - tid då felet inträffade (sekunder sedan 1970)
ERRORURL_RP - entityID för tjänsten
ERRORURL_TID - ett transaktionsid i tjänsten
ERRORURL_CTX - kontext för felet (vilka attribut som saknas, vilken behörighet som saknas osv)
Dessa ytterligare attribut kan användas i en dynamisk implementation av errorURL för att ytterligare förbättra informationen till användare som får problem vid inloggning i tjänster. En mer dynamisk errorURL för en identitetsutfärdare skulle kunna vara
https://saml-error.example.com/?errorurl_code=ERRORURL_CODE&errorurl_ts=ERRORURL_TS&errorurl_rp=ERRORURL_RP&errorurl_tid=ERRORURL_TID&errorurl_ctx=ERRORURL_CTX
Om exempelvis en tjänst som kräver att användare uppfyller tillitsnivån SWAMID AL2 får en inloggning på tillitsnivå SWAMID AL1 så kan tjänsten hänvisa användaren till
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 den bekräftar sin identitet, exempelvis besöksadress till en helpdesk eller hänvisning till online-identifiering av användarekonton hos identitetsutfärdaren.
Implementation av errorURL för identitetsutfärdare
SWAMID har byggt en exempelimplementation av den utökade hanteringen av errorURL. Denna finns implementerad i PHP, JSP, .NET Core samt statiska HTML-sidor. Implementationen är fri att använda och modifiera efter identitetsutfärdares egna behov.
Exempelimplementatonen återfinns på https://github.com/SUNET/swamid-errorurl.
En statisk sida
Vid utelämnande av strängen ERRORURL_CODE i en errorURL så finns ingen sträng att ersätta för tjänster På så vis hänvisas användare vid alla typer av fel till samma sida.
Exempel:
https://saml-error.example.com/errorurl.html
Detta kan vara enda alternativet för tjänsteleverantörer som inte kan välja namn på webb
Fem statiska sidor
Då det finns fyra felkategorier så räcker det med fem statiska sidor för att tillhandahålla sidor för de fyra felkategorierna. Den femte sidan är då en omodifierad errorURL där tjänten inte bytt ut strängen ERRORURL_CODE mot någon felkategori.
Exempel:
https://saml-error.example.com/ERRORURL_CODE.html
En dynamisk sida
En dynamisk sida har möjlighet att avgöra vilken tjänst som efterfrågades och vilken kontext som skickades med. Det möjliggör också att ytterligare information som kan underlätta vid felsökning hos identitetsutfärdaren finns med i en eventuell supportförfrågan till identitetsutfärdaren från användaren.
Exempel:
https://saml-error.example.com/?errorurl_code=ERRORURL_CODE&errorurl_ts=ERRORURL_TS&errorurl_rp=ERRORURL_RP&errorurl_tid=ERRORURL_TID&errorurl_ctx=ERRORURL_CTX