Autentisering av nettkunde i nettutleverers portal
Innledning
For å få utlevert informasjon om resepter i nettutleverers portal må kunden autentisere seg. Autentiseringen utføres gjennom pålogging i ID-porten på høyeste sikkerhetsnivå (nivå 4).
Historisk sett har ID-porten benyttet SAML2-standarden. Denne skal fases ut og erstattes av OAuth2.0/OIDC.
Autentiseringsinformasjon utveksles mellom nettutleverer og ID-porten og når kunden har autentisert seg gjennom ID-porten, kan nettutleverer sende forespørsler til Reseptformidleren.
Reseptformidleren vil verifisere kundens autentisering. Forespørsler fra nettkunde til Reseptformidleren (M9NA1 Forespørsel om reseptliste fra nettkunde og M9NA3 Forespørsel om utvidet informasjon på resept fra nettkunde) skal inneholde et teknisk bevis slik at Reseptformidleren kan verifisere autentiseringen.
Det tekniske beviset som nettutleverer mottar fra ID-porten legges ved som vedlegg til hodemeldingen i M9NA1 og M9NA3.
Datautveksling ved bestilling av reseptbelagte varer på internett
For å tilby bestilling av reseptbelagte varer på Internett vil nettutleverers løsning bestå av en portal i tillegg til utleverersystemet. Portalen er tilgjengelig på Internett (ekstern sone), mens utleverersystemet (som er i sikker sone) kommuniserer med Reseptformidleren over helsenettet. Kommunikasjon med Reseptformidleren som initieres fra portal i nettutleverer skal gå gjennom utleverersystemet. Portalen kan ikke kommunisere direkte med Reseptformidleren, og skal ikke benytte meldinger på e-resept format. Dette er illustrert i figuren under.
Verifisering av teknisk bevis på kundens autentisering i portal nettutleverer
OAuth2.0/OIDC basert verifisering
Reseptformidlerens nettutleverertjeneste støtter også OAuth2 eller OIDC basert autentisering av bruker. OAuth2 flyten baserer seg på ID-porten sin støtte for brukerstyrt datadeling. Selve tokenet reseptformidleren forventer er en signert jwt "self-container/by value", hvilke felter som er forventet med hva følger.
Validering av token
Reseptformidleren vil verifisere kundens autentisering ved å validere følgende om OIDC tokenet, terminologien OIDC token og access token brukes om en annen her.
Validere at tokenet er en signert jwt
Validere at tokenet er utstedt av ID-porten (
iss
claimet er som idporten beskriver)I test
https://test.idporten.no
I produksjon
https://idporten.no
Validere at tokenet ikke er utgått (
exp
claim)Validere at tokenet er signert av ID-porten (er tokenet signert med privatnøkkelen som tilsvarer den offentlig nøkkelen id-porten referert til fra well-known)
Validere at tokenet er tiltenkt reseptformidleren (audience claim “aud”)
for alle test miljø:
http://nhn.test2-na.reseptformidleren.net/NA/NAWebServiceSoapHttpPort
for prod:
http://nhn.prod-na.reseptformidleren.net/NA/NAWebServiceSoapHttpPort
Validere at tokenet kun har følgende scope: "eresept:nettutleverer" og "openid". Dette gjelder for M9NA1 og M9NA3.
Nettutlevererens identitet skal verifiseres og stemme over ens i M9NA1/M9NA3 og OIDC token:
Nettapotekets juridiske enhet sitt organisasjonsnummer skal være i ISO6523 format i "consumer" claimet, se på ID-porten sin dokumentasjon om access token for mer info.
Internt oppslag i Reseptformidlerens register over aktører skal gjøres for å validere at organisasjonsnummeret i nettapotekets virksomhetssertifikat stemmer.
Validerer at identiteten angitt som pålogget kunde i M9NA1/M9NA3 er den samme identiteten som angitt i OIDC tokenets
pid
claim. Identitet er enten fødselsnummer eller d-nummer.Validerer at tokenet har sikkerhetsnivå 4 (claim
acr
eridporten-loa-high
), dvs kunden har logget inn med bankid.Validerer i tokenet at klienten (nettutlevereren) har autentisert seg mot ID-porten med virksomhetssertifikat eller private_key_jwt (d.v.s. integrasjonen mot ID-porten er med "private_key_jwt") effektivt at
client_amr
claimet ervirksomhetssertifikat
ellerprivate_key_jwt
.
Et eksempel på base 64 de-enkodet access token fra ID-porten er gitt under:
SAML basert verifisering
SAML basert verifisering i ID-porten fases ut og erstattes av OAuth2.0/OIDC.
SAML Assertion profilene til ID-porten er dokumentert på: http://begrep.difi.no/ID-porten
Reseptformidleren vil verifisere kundens autentisering ved å validere følgende i SAML Assertion:
Validere SAML Assertion mot skjema
Validere at SAML Assertion er utstedt av ID-porten
Validere at tidsstempel i SAML Assertion er gyldig (NotBefore og NotOnOrAfter i Conditions, innenfor et tidsintervall konfigurert i Reseptformidleren)
Validere at signaturen er gyldig for SAML Assertion
Validere sertifikatet, ved å validere både signatursertifikatet og hele sertifikatkjeden:
Sertifikatet er utstedt av godkjent CA
Sertifikatet har gyldig tid og dato (sjekk ‘not before’ og ‘not after’)
Sertifikatet har ikke blitt revokert
Sertifikatet har korrekt «Key usage» : digitalSignature (0) eller contentCommitment(1)
Signatursertifikatet er utstedt til godkjent SAML Assertion utsteder: Difis orgnummer skal ligge i SERIALNUMBER
Nettapotekets identitet skal verifiseres og stemme over ens i M9NA1/M9NA3 og SAML Assertion:
Nettapoteket blir autentisert gjennom å kontrollere signaturen på meldingen M9NA1/M9NA3. Dette virksomhetssertifikatet skal inneholde apotekets organisasjonsnummer på standard måte; Det vil si at organisasjonsnummeret ligger i OU-feltet på Buypass-sertifikater (ikke avklart for Commfides-sertifikater)
Nettapotekets interne ID-porten-identitet ligger i SAML Assertion i feltet Audience (Audience i Conditions). Som en del av registreringsprosessen for nettapotek må denne identiteten oppgis til e-helse, og registreres i Reseptformidleren sammen med nettapotekets HER-ID og organisasjonsnummer.
Internt oppslag i Reseptformidlerens register over aktører skal gjøres for å validere at organisasjonsnummeret i nettapotekets virksomhetssertifikat stemmer over ens med nettapotekets ID-porten identifikator Audience.
Identiteten angitt som pålogget kunde i M9NA1/M9NA3 er den samme identiteten som angitt i SAML Assertion (<saml:Attribute Name="uid">). Identitet er enten fødselsnummer eller d-nummer
SAML Assertion skal ha sikkerhetsnivå 4(<saml:Attribute Name="SecurityLevel">)
Et eksempel på SAML Assertion fra ID-porten er gitt under:
SAML Assertion eksempel