Veiledning til oppsett og integrasjon med ID-porten for nettutleverer.
Innledning
For å få utlevert informasjon om resepter i nettutleverers (nettapotek) portal må kunden autentisere seg. Autentiseringen utføres gjennom pålogging i ID-porten på høyeste sikkerhetsnivå (nivå 4) og har 30 min levetid.
Denne veiledningen beskriver bruk av ID-porten for autentisering med OIDC for nettutleverertjenestene M9NA1 og M9NA3. OIDC erstatter SAML for autentisering for brukere av disse tjenestene.
Meldinger til nettutleverer støtter validering av kundens identitet med et OIDC token fra ID-porten. Validering av kundens tekniske bevis med OIDC token fra ID-porten baserer seg på brukerstyrt datadeling i ID porten. OIDC tokenet (JWT) sendes som et base64 enkodet vedlegg i hodemeldingen.
Se også:
Samarbeidsportalen: https://samarbeid.digdir.no/id-porten/id-porten/18
E-resept sikkerhetsarkitektur: Autentisering av nettkunde i nettutleverers portal
Oppsett
For å kunne tilby innlogging/autentisering med OIDC token må virksomheten:
Registrere virksomheten hos Id-porten. Det er viktig å merke seg at virksomheten som registrerer seg må ha samme organisasjonsnummer som nettutlevererens juridiske enhet, altså at virksomheten er hovedenhet til nettutleverer aktøren. Se https://samarbeid.digdir.no/id-porten/ta-i-bruk-id-porten/94.
Kontakt kundesenter kundesenter@nhn.no med forespørsel om tilgang til
eresept:nettutleverer
api'et (scope) for deres organisasjon (organisasjonsnummer til juridisk enhet).Opprette en integrasjon mot api’et i ID-portens selvbetjeningsløsning som:
Bruker Difi-tjenesten
API-klient
har scopene
eresept:nettutleverer
ogopenid
Velg
private_key_jwt
som klientautentiseringsmetode. Vi aksepterervirksomhetssertifikat
ellerprivate_key_jwt
somclient_amr
. Se id_porten sin dokumentasjon.
Integrasjon mot Id-porten
For implementering av integrasjon mot ID-porten se: Overordnet arkitekturbeskrivelse | ID-porten.
Merk at frem til mars 2024 er at det er 2 plattformer for oidc hos idporten. Den gamle som fases ut mars 2024, samt den nye plattformen som har issuer https://test.idporten.no
. I interesse av å unngå unødvendige migeringer er det bestemt at kun ny plattform tilgjengeliggjøres som godkjent autentiseringsserver for nettutleverer oidc integrasjon.
Aktøren kan nå nytte integrasjonen til å logge inn en bruker og få et JWT access token for den innloggete brukeren. En liste over verifikasjonstester samt testbrukerer finnes i dokumentasjon til id-porten. Denne integrasjonen støtter også syntetiske testpersoner fra tenor hos skattetaten (+80 på måned).
Selve autentiseringssesjonen for scope eresept:nettutleverer
har en levetid på 30 minutt, token har levetid på 5 minutt.
Eksempel på riktig JWT payload for et testmiljø ("aud" : ["http://nhn.test2-na.reseptformidleren.net/NA/NAWebServiceSoapHttpPort", "<din-client-id>"]
), for en fiktiv nettutleverer med juridisk enhet 1234567
, integrasjons-id (client_id) 57308738-56fa-4676-b422-83269165b00e
og innlogget bruker med fødselsnummer 19108209340
:
{
"sub" : "19108209340",
"iss" : "https://test.idporten.no",
"client_amr" : "private_key_jwt",
"pid" : "19108209340",
"client_id" : "57308738-56fa-4676-b422-83269165b00e",
"aud" : [ "http://nhn.test2-na.reseptformidleren.net/NA/NAWebServiceSoapHttpPort", "57308738-56fa-4676-b422-83269165b00e" ],
"acr" : "idporten-loa-high",
"scope" : "eresept:nettutleverer openid",
"supplier" : {
"authority" : "iso6523-actorid-upis",
"ID" : "0192:994598759"
},
"exp" : 1698850286,
"iat" : 1698849986,
"jti" : "nTzgwkfHbGg",
"consumer" : {
"authority" : "iso6523-actorid-upis",
"ID" : "0192:1234567"
}
}
OIDC token i hodemeldingen til M9NA1 og M9NA3
OIDC JWT tokenet skal inkluderes som base64 kodet vedlegg til hodemeldingen for M9NA1 og M9NA3. OIDC tokenet legges etter hoveddokumentet/e-reseptmeldingen.
Eksempel:
<MsgHead *attributter*>
<MsgInfo>
<!-- Meldingsmetadata -->
</MsgInfo>
<Document>
<!-- Hoveddokument (M9NA1/M9NA3) -->
</Document>
<Document> <!-- Teknisk vedlegg -->
<RefDoc>
<MsgType V="XML" DN="XML-instans" />
<Content>
<bas:Base64Container xmlns:bas="http://www.kith.no/xmlstds/base64container">
<!-- base64-encoded-oidc-jwt -->
</bas:Base64Container>
</Content>
</RefDoc>
</Document>
</MsgHead>
Den eneste forskjellen fra ID-portens SAML integrasjon er at <bas:Base64Container>
elementet inneholder en base-64 enkodet JWT.
OIDC tokenet (JWT) består av tre base64 enkodede segmenter som tilsvarer header, payload, og signatur separert av punktum. Hvert enkelt av disse segmentene er allerede base64 enkodet, men skal base64 kodes samlet i Content/Base64Container.
Eksempel på header, payload, og signatur separert av punktum:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Med en base-64 enkodet JWT mener vi at denne stringen er base-64 enkodet igjen:
base64EnkodetJwt = base64(
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9'
+ '.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ'
+ '.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
)
Eksempel på base64Enkodet JWT:
ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnpkV0lpT2lJeE1qTTBOVFkz
T0Rrd0lpd2libUZ0WlNJNklrcHZhRzRnUkc5bElpd2lhV0YwSWpveE5URTJNak01TURJeWZRLlNm
bEt4d1JKU01lS0tGMlFUNGZ3cE1lSmYzNlBPazZ5SlZfYWRRc3N3NWMK