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: https://e-resept.atlassian.net/wiki/spaces/ERDOK/pages/953976920

Oppsett

For å kunne tilby innlogging/autentisering med OIDC token må virksomheten:

  1. 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.

  2. Kontakt kundesenter kundesenter@nhn.no med forespørsel om tilgang til eresept:nettutleverer api'et (scope) for deres organisasjon (organisasjonsnummer til juridisk enhet).

  3. Opprette en integrasjon mot api’et i ID-portens selvbetjeningsløsning som:

    1. Bruker Difi-tjenesten API-klient

    2. har scopene eresept:nettutleverer og openid

    3. Velg private_key_jwt som klientautentiseringsmetode. Vi aksepterer virksomhetssertifikat eller private_key_jwt som client_amr. Se id_porten sin dokumentasjon.

Integrasjon mot Id-porten

For implementering av integrasjon mot ID-porten se: .

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