Introduktion

Dette dokument er rettet mod personer der skal forstå de fejlsituationer der kan opstå ved kald til STS.

Behandling af forespørgsel

Ved behandling af en forespørgsel om udstedelse af ID-kort hos en STS, gennemgås en række skridt. Forløbet er skitseret forsimplet nedenfor, med de skridt der har primær relevans i forhold til diagnosticering af udstedelse. Hvert skridt kan føre til en afvisning af forespørgslen, mens succesfuld verifikation leder til signering og dermed udstedelse af et ID-kort.

Verificeret forespørgsel

Ved succesfuld udstedelse af et STS signeret ID-kort returneres et SOAP svar fra STS indeholdende relevante ID-kort attributter (SAML assertions), dvs. både verificerede (f.eks CVR) og berigede (f.eks. CPR), samt øvrig information jævnfør DGWS.

<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope ...>
	<soapenv:Header>
		<wsse:Security id="AAABL0ncNMXd26QUzOR4JlNPU0k=">
			<wsu:Timestamp>
				<wsu:Created>2011-04-12T15:17:41</wsu:Created>
			</wsu:Timestamp>
		</wsse:Security>
	</soapenv:Header>
	<soapenv:Body>
		<wst:RequestSecurityTokenResponse Context="www.sosi.dk">
			<wst:TokenType>urn:oasis:names:tc:SAML:2.0:assertion:</wst:TokenType>
			<wst:RequestedSecurityToken>
				...
			</wst:RequestedSecurityToken>
			<wst:Status>
				<wst:Code>http://schemas.xmlsoap.org/ws/2005/02/trust/status/valid</wst:Code>
			</wst:Status>
			<wst:Issuer>
				<wsa:Address
>TESTSTS</wsa:Address>
			</wst:Issuer>
		</wst:RequestSecurityTokenResponse>
	</soapenv:Body>
</soapenv:Envelope>

Ovenstående eksempel viser en del af et svar indeholdende et STS signeret ID-kort. I eksemplet er namespace erklæringer samt alle ID-kort attributter fjernet af hensyn til overskuelighed. Vigtige elementer ved diagnosticering er:

Afvist forespørgsel

På tilsvarende vis leverer en STS ved afvist forespørgsel et SOAP svar (Fault) indeholdende yderligere information om fejlen.

Nedenstående eksempel viser (igen uden namespace erklæringer) elementerne i svaret der bruges i forbindelse med diagnosticering:

Det er kombinationen af faultcode, faultactor og faultstring som identificerer fejlen, hvor faultstring typisk indeholder den nødvendige information for nærmere fejlsøgning.

Faultcode værdier skal ikke betragtes som entydige fejlkoder, men skal ses i sammenhæng og bør betragtes som en gruppering af de fejltyper der kan opstå ved behandling af kald til tjenester på en STS:

Faultactor værdier

Eksempel på afvist forespørgsel

<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope ...>
	<soapenv:Header>
		<wsse:Security id="">
			<wsu:Timestamp>
				<wsu:Created>2011-04-12T15:17:39</wsu:Created>
			</wsu:Timestamp>
		</wsse:Security>
	</soapenv:Header>
	<soapenv:Body>
		<soapenv:Fault>
			<faultcode>wst:InvalidRequest</faultcode>
			<faultstring>The request was invalid or malformed</faultstring>
			<faultactor>dk:sosi:sts</faultactor>
		</soapenv:Fault>
	</soapenv:Body>
</soapenv:Envelope>


Detaljer i fejltekster

Ved nogle fejl kan faultstring indeholde dynamiske informationer som f.eks. autorisationskoder mv. Disse informationer kan anvendes af det kaldende system hvis systemet ikke selv har mulighed for at slå informationerne op i f.eks. Stamdata komponenten.

Det skal bemærkes at en fremtidig opdatering ef DGWS eller en overgang til en anden standard kan betyde at disse informationer ikke længere er inkluderet i faultstring.

Fejlsituationer

De følgende afsnit beskriver en delmængde af de fejlsituationer, man som anvender kan komme ud for i forbindelse med udstedelse af ID-kort mod en STS. Beskrivelserne består af:

I forbindelse med fejlsøgning sammenholdes den konkrete SOAP fejl med de beskrevne STS svar ved hjælp af faultcode, faultactor og faultstring.

Verify UserInfo

CPR check

Ugyldig CPR nummer
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts:cvrridcpr
faultstring = Authentication failed: cvrrid-cpr mismatch [CVR:*-RID:*,*]
ÅrsagAnvender, bruger
ForklaringMOCES Certifikat og CPR-nummer fra ID-kort stemmer ikke overens, og identitet kan ikke bekræftes.
Løsning
  1. Undersøg om det anvendte certifikat svarer til ID-kortet
  2. Undersøg om CPR i ID-kort er som forventet
  3. Undersøg hvilket CPR er tilknyttet certifikatet
Manglende CPR nummer tilknytning
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts:cvrridcpr
faultstring = Authentication failed: illegal cvrrid [CVR:*-RID:*]
ÅrsagAnvender, bruger
ForklaringDet anvendte MOCES certifikat har ikke noget tilknytte CPR-nummer og identitet kan ikke bekræftes.
LøsningCheck at der er tilknyttet et CPR til certifikatet hos DanID
Fejl ved CPR nummer opslag
STS svarfaultcode = wst:RequestFailed
faultactor = dk:sosi:sts:cvrridcpr
faultstring = The specified request failed:*
ÅrsagSTS
ForklaringSTS har ikke kunnet foretage opslag imod RID-CPR tjeneste og dermed ikke kunnet verificere ID-kortet.
Løsning
  1. Gentag forespørgsel efter kort pause
  2. Ved gentagne fejl kontakt helpdesk med detaljeret fejlbesked

Autorisations check

Manglende autorisation
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts:autorisation
faultstring = Authentication failed: missing authorization
ÅrsagBruger
ForklaringDer findes ikke nogle tilknyttede gyldige autorisationer til CPR-nummeret i autorisationsregisteret.
LøsningCheck at brugeren har en gyldig autorisation.
Forkert autorisation
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts:autorisation
faultstring = Authentication failed: authorization not found (available [{code, role}, .., {code, role}])
ÅrsagBruger
ForklaringDer blev ikke fundet en autorisation tilknyttet CPR-nummeret, som matcher autorisations- eller uddannelseskode i ID-kortet. Medsendt i fejlteksten er en liste over de autorisationskoder (code) og uddannelseskoder (role) som er tilgængelige for CPR-nummeret.
LøsningTjek at brugerens autorisationer mathcer med de medsendte oplysninger i ID-kortet, dvs. SAML attributten UserAuthorizationCode (autorisationskode) og UserRole (uddannelseskode). Anvend eventuelt en af de mulige kombinationer i fejlteksten.
Flere autorisationer fundet
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts:autorisation
faultstring = Authentication failed: multiple authorizations found ([{code, role}, .., {code, role}])
ÅrsagBruger
ForklaringDer blev fundet mere end én autorisation tilknyttet CPR-nummeret, som matcher autorisations- eller uddannelseskode i ID-kortet. Medsendt i fejlteksten er en liste over de autorisationskoder (code) og uddannelseskoder (role) som matchede.
LøsningAngiv i ID-kortet hvilken autorisation der skal bruges, dvs. enten med angivelse af autorsations- eller uddannelseskode. Anvend eventuelt en af de mulige kombinationer i fejlteksten.

Check af CPR claim

Manglende CPR claim
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = CPR claim missing
ÅrsagAnvender
ForklaringDen medsendte forespørgsel indeholder ikke et CPR claim.
LøsningFremsend en ny forespørgsel med et gyldigt CPR claim (og overvej at stramme op på klient systemets input validering).
Ugyldigt CPR claim
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = CPR-number must be 10 digits
ÅrsagAnvender
ForklaringDen medsendte forespørgsel indeholder et CPR claim i ugyldigt format.
LøsningFremsend en ny forespørgsel med et gyldigt CPR claim (og overvej at stramme op på klient systemets input validering).
Forkert CPR claim
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:its
faultstring = CPR/PID mismatch
ÅrsagAnvender
ForklaringDet medsendte påståede CPR matcher ikke cpr nummeret tilknyttet brugerens certifikat. Brugeren har formentlig tastet forkert.
LøsningFremsend en ny forespørgsel med et gyldigt CPR claim.

Check af audience

Angivelse af audience mangler
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:its
faultstring = Audience is missing
ÅrsagAnvender
ForklaringDen medsendte forespørgsel indeholder ikke angivelse af et audience (som det udstedte token kan benyttes til)
LøsningAnvendersystemet tilrettes til at medsende audience (dette vil ofte være https://fmk).
Ukendt audience
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:its
faultstring = Audience not configured
ÅrsagAnvender
ForklaringDen medsendte forespørgsel indeholder angivelse af et ukendt audience (som det udstedte token kan benyttes til)
LøsningAnvendersystemet tilrettes til at medsende korrekt audience (dette vil ofte være https://fmk).

Check af signatur på besked

Ugyldig signatur
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = Unable to validate envelope signature
ÅrsagAnvender
ForklaringDen medsendte forespørgsel indeholder ingen eller en ugyldig xml signatur - dette sker ofte ved omformatering af indeholdet på en signeret besked
LøsningAnvendersystemet tilrettes til at signere og/eller undgå omformatering i forbindelse med afsendelse
Certifikat udløbet
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts:*
faultstring = Certificate expired or not yet valid
ÅrsagAnvender
ForklaringDen medsendte forespørgsel er signeret med et udløbet certifikat.
LøsningAnvendersystemet skal forny sit certifikat og benytte dette. Endvidere skal NSP konfigureres til at tillade det nye certifikat
Certifikat revokeret
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts:*
faultstring = Certificate revoked
ÅrsagAnvender
ForklaringDen medsendte forespørgsel er signeret med et revokeret certifikat.
LøsningAnvendersystemet skal forny sit certifikat og benytte dette. Endvidere skal NSP konfigureres til at tillade det nye certifikat
Certifikat ikke konfigureret
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts:*
faultstring = Signing certificate not whitelisted for this audience
ÅrsagAnvender
ForklaringDet signerende certifikat er ikke whitelistet til at det angivne audience.
LøsningKontakt NSP support med henblik på at få det ønskede certifikat whitelistet.

Check af Bootstrap token

Ugyldig signatur
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = Signature on OIOSAMLAssertion is invalid
ÅrsagAnvender
ForklaringDen medsendte forespørgsel indeholder et bootstrap token med ugyldig xml signatur - dette sker ofte ved omformatering af indeholdet på en signeret besked
LøsningAnvendersystemet tilrettes til at signere og/eller undgå omformatering i forbindelse med afsendelse
Certifikat udløbet
STS svar

faultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = En af følgende:

  • Bootstrap token signer expired
  • BST2SOSI Certificate expired
  • JWT signer expired
  • NBO certificate expired
  • JWT signer expired
ÅrsagAnvender eller konfiguration
ForklaringDet indeholdte bootstrap token er signeret med et udløbet certifikat.
LøsningKontakt NSP support. Den Idp (typisk Nem-id) som signerer bootstrap token skal benytte et nyt certifikat, NSP skal konfigureres til at stole på dette.
Certifikat endnu ikke gyldigt
STS svar

faultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = En af følgende:

  • Bootstrap token signer not valid yet
  • BST2SOSI Certificate not valid yet
  • JWT signer not valid yet
  • NBO certificate not valid yet
  • JWT signer not valid yet
ÅrsagAnvender eller konfiguration
ForklaringDet indeholdte bootstrap token er signeret med et certifikat der endnu ikke kan benyttes.
Løsning

Et af følgende:

  1. Vent til certifikatet bliver gyldigt. Tidspunktet fremgår af certifikatet.
  2. Kontakt NSP support. Den Idp (typisk Nem-id) som signerer bootstrap token skal benytte et nyt certifikat, NSP skal konfigureres til at stole på dette.
Certifikat revokeret
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = En af følgende:
  • Bootstrap token signer revoked
  • BST2SOSI Certificate revoked
  • JWT signer revoked
  • NBO certificate revoked
  • JWT signer revoked
ÅrsagAnvender eller konfiguration
ForklaringDet indeholdte bootstrap token er signeret med et revokeret certifikat.
LøsningKontakt NSP support. Den Idp (typisk Nem-id) som signerer bootstrap token skal benytte et nyt certifikat, NSP skal konfigureres til at stole på dette.
Certifikat ikke trusted
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = The certificate that signed the security token is not trusted
ÅrsagAnvender eller konfiguration
ForklaringDet indeholdte bootstrap token er signeret med et certifikat, som ikke accepteres af STS. Bootstrap token bør typisk være signeret af Nem-id.
LøsningAnvend et bootstrap token signeret af Nem-id, eller kontakt NSP support med henblik på alternativ løsning om nødvendigt (der findes et anvendeligt alternativ i testmiljøerne))
Bootstrap token ikke udstedt til borger
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:its
faultstring = Token not issued to a citizen
ÅrsagAnvender
ForklaringDet indeholdte bootstrap token er ikke udstedt på baggrund af en borgers certifikat. Kun borger-certifikater kan anvendes
LøsningAnvend et bootstrap token udstedet på baggrund af et borger certifikat (POCES).
Ugyldigt nameid
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:its
faultstring = Invalid name: <nameid>
ÅrsagUkendt
ForklaringDet indeholdte bootstrap token indeholder et ugyldigt formateret nameid.
LøsningHvis bootstrap token er udstedt af Nem-id, kontaktes NSP supporten med henblik på analyse af fejlen.
Bootstrap token udløbet
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:its
faultstring = Bootstrap token no longer valid
ÅrsagOftest anvender
ForklaringDet indeholdte bootstrap token er udløbet.
LøsningHent og benyt et nyt bootstrap token.

Dekryptering

Token kan ikke dekrypteres
STS svarfaultcode = wst:InvalidRequest
faultactor = dk:sosi:sts:*
faultstring = Unable to decrypt element
ÅrsagAnvender
ForklaringDen medsendte forespørgsel indeholder et token, som er krypteret med en nøgle som ikke er kendt af STS’en
LøsningKan f.eks. skyldes manglende kryptering, kryptering med forkert nøgle, eller at der er "pillet" ved data efter kryptering.

Parse SecurityToken Request

Ugyldig ID-kort version
STS svarfaultcode = wst:RequestFailed
faultactor = dk:sosi:sts:seal
faultstring = The specified request failed IDCard version ’*’ not supported. Supported versions are: [1.0.1,1.0]
ÅrsagAnvender
ForklaringForespørgslen indeholder et ID-kort med en version der ikke understøttes af STS (se DGWS for detaljer).
LøsningKlienten rettes, så kun understøttede ID-kort versioner anvendes. Nyere versioner af både Seal.Java og Seal.NET producerer ID-kort med korrekt version.

Check Authentication Level

Ugyldig Authentication Level
STS svarfaultcode = wst:RequestFailed
faultactor = dk:sosi:sts
faultstring = The specified RequestSecurityToken is not understood: Authentication level not supported (*)
ÅrsagAnvender
ForklaringForespørgslen indeholder et ID-kort med et authentication level der ikke er understøttet, dvs. forskelligt fra level 3 eller 4 (se DGWS for detaljer).
LøsningKlienten rettes, så kun understøttede authentication level versioner anvendes.

Verify ID Card

ID-kort gyldighed
STS svarfaultcode = wst:InvalidTimeRange
faultactor = dk:sosi:sts
faultstring = The requested time range is invalid or unsupported: IDCard have maximum validity of 24 hours + [*]
ÅrsagAnvender
ForklaringForespørgslen anmoder om et ID-kort med gyldighed mere end 24 timer, hvilket ikke understøttes (se DGWS for detaljer).
LøsningKlienten rettes, så kun ID-kort med gyldighed på 24 timer eller mindre forsøges udstedt.
ID-kort gyldighed
STS svarfaultcode = wst:InvalidTimeRange
faultactor = dk:sosi:sts
faultstring = The requested time range is invalid or unsupported: IDCard is created after or expires before current system time
ÅrsagAnvender, STS
ForklaringID-kortet er udstedt på et system, der ikke er tidssynkroniseret med STS. Hvis tiden afviger signifikant (der tillades nogen tidsdrift), kan ID-kortet ikke udstedes.
LøsningSåfremt STS tiden ikke er korrekt vil der generelt være problemer med udstedelsen af ID-kort. Fejlen vil derfor overvejende skulle fejlsøges hos anvenderen:
  1. Undersøg om anvenderens IT-system anvender korrekt tid
  2. Check om NTP anvendes, evt. hyppighed og NTP server
  3. Synkroniser tid
Id kort for gammelt til denne modtager
STS svarfaultcode = wst:InvalidTimeRange
faultactor = dk:sosi:sts
faultstring = The requested time range is invalid or unsupported: IDCard is too old for this audience: * [*>*]
ÅrsagAnvender
ForklaringVed billetomveksling kan der være lagt begrænsninger på hvor gammelt det id-kort som søges vekslet må være. Medsendt i fejlteksten er modtager, samt aktuel og maksimal alder på id-kortet i minutter. Dette vil typisk være 24 timer, men kan for visse modtagere være mindre.
LøsningForny ID-kortet og få det signeret af STS.

Verify Certificate

Ugyldig udsteder
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts
faultstring = Authentication failed: certificate issued by invalid party
ÅrsagAnvender
ForklaringDet underskrivende certifikat er ikke udstedt i føderationen og kan derfor ikke anvendes til udstedelse af ID-kort.
Løsning
  1. Undersøg hvilken STS der er brugt, dvs. Test eller Produktion.
  2. Undersøg hvilken CA der har udstedt certifikatet

Verify ACL

MOCES certifikat black listed
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts
faultstring = Authentication failed: MOCES is blacklisted [*]
ÅrsagSTS
ForklaringDet underskrivende certifikat er black listed i STS’en og kan derfor ikke udstede ID-kort.
Løsning
  1. Bekræft at certifikatet er black listed
  2. Undersøg årsagen til black listing

Verify SystemInfo

CVR uoverensstemmelse
STS svarfaultcode = wst:FailedAuthentication
faultactor = dk:sosi:sts
faultstring = Authentication failed: cvr mismatch
ÅrsagAnvender
ForklaringCVR i ID-kortet svarer ikke til CVR i certifikatets subject serial number.
Løsning
  1. Verificer CVR nummer i STS forespørgsel
  2. Find CVR i certifikatet

STS svarfaultcode
faultactor
faultstring
Årsag
Forklaring
Løsning

STS svarfaultcode
faultactor
faultstring
Årsag
Forklaring
Løsning

STS svarfaultcode
faultactor
faultstring
Årsag
Forklaring
Løsning

STS svarfaultcode
faultactor
faultstring
Årsag
Forklaring
Løsning

STS svarfaultcode
faultactor
faultstring
Årsag
Forklaring
Løsning