For getting access tokens from maskinporten
Tar denne på norsk, siden maskinporten er norsk
- Ta i bruk maskinporten som konsument (Registrering og sånt)
- Maskinporten dokumentasjon
npm i @vtfk/maskinporten-auth
Mer spesifikke steg beskrives under
Du må ha på plass sertifikater og nøkler før du kan bruke denne pakka. Se avsnitt Oppsett
const maskinportenToken = require('@vtfk/maskinporten-auth')
// PEM
const options = {
url: 'url for hente token fra maskinporten', // Sjekk ulike endepunkter her: https://docs.digdir.no/docs/Maskinporten/maskinporten_func_wellknown.html
pemcert: 'et PEM sertifikat som BASE64-string',
pemprivateKey: 'en PEM privat nøkkel som BASE64-string',
audience: 'https://maskinporten.no', // // Sjekk ulike audience her: https://docs.digdir.no/docs/Maskinporten/maskinporten_func_wellknown.html
issuer: 'klientID-guid fra maskinporten klienten du har satt opp',
scope: 'prefix:scope', // Scopet du vil ha token for
}
// Eller PFX
const optionsPfx = {
url: 'url for hente token fra maskinporten', // Sjekk ulike endepunkter her: https://docs.digdir.no/docs/Maskinporten/maskinporten_func_wellknown.html
pfxcert: 'et PFX sertifikat som BASE64-string',
privateKeyPassphrase: 'krypertingspassordet for sertifikatets privatekey',
audience: 'https://maskinporten.no', // // Sjekk ulike audience her: https://docs.digdir.no/docs/Maskinporten/maskinporten_func_wellknown.html
issuer: 'klientID-guid fra maskinporten klienten du har satt opp',
scope: 'prefix:scope', // Scopet du vil ha token for
}
try {
const token = await maskinportenToken(options)
console.log(token)
} catch (error) {
console.log('Something went wrong. ', error)
}
- Bruker på Samarbeidsportalen. (For prod må man få delegert tilgang fra Altinn hovedadministrator)
- Virksomhetssertifikat for din organisasjon - et for prod, og et for test.
-
Logg på Samarbeidsportalen. Klikk deg inn på Integrasjoner -> Selvbetjening
-
Velg "Ver 1" for test-miljø, "Ver 2" for pre-release test-miljø (kommende funksjoner), "Produksjon" for, ja, produksjon
-
Opprett en ny integrasjon. Legg til de scopene integrasjonen skal ha tilgang til (f. eks "ks:fiks", Les mer om scopes her)
-
Resultatet bør se omtrent slik ut:
-
Når integrasjonen er ferdig satt opp, ta med deg Integrasjons-ID, og scopes for integrasjonen (du finner de igjen i selvbetjeningsportalen, så no worries om du glemmer de)
- Om du satte opp integrasjonen i "Produksjon", bruk prod-virksomhetssertifikat, om integrasjonen er i "Ver 1" eller "Ver 2", bruk test-virksomhetetssertifikat. Organisasjonen din bør ha begge typer, om du er usikker - spør en voksen.
- Om du har et .p12 sertifikat - ta å rename det til .pfx
- Lagre sertifikatet du skal bruke sikkert et sted du kan kjøre openssl (UNIX) (hvis du har Windows - bruk WSL)
- Kjør kommando:
openssl pkcs12 -in "path-to-your-sertificate/yourSertificate.p12" -out "some-place-you-know/PemSertificate.pem" -nodes -clcerts
- Resultatet i PemSertificate.pem skal se omtrent slik ut:
Bag Attributes
friendlyName: Authentication certificate || Issuer certificate || Root certificate || Organisasjonsnavn TEST
localKeyID: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablublabla
blablablablablablabalabblablablablablablabalabblablablablablabla
-----END PRIVATE KEY-----
Bag Attributes
friendlyName: ORGANISASJONEN DIN
localKeyID: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
subject=C = NO, O = ORGANISASJONEN DIN, OU = XX, CN = ORGANISASJONEN DIN, serialNumber = xxxxxxxxx
issuer=C = NO, O = RompePass AS-12345678, CN = RompePass Class 3 blabla4 CA 3
-----BEGIN CERTIFICATE-----
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
-----END CERTIFICATE-----
- Mot Maskinporten er du ute etter sertifikat og key av typen
friendlyName: Authentication certificate
ellerfriendlyName: <org.navn> TEST
- Kopier ut Authentication certificate fra og med "-----BEGIN CERTIFICATE-----" til og med "-----END CERTIFICATE-----", og lagre det i en egen fil kalt "cert.pem"
- Kopier ut Authentication certificate fra og med "-----BEGIN PRIVATE KEY----" til og med "-----END PRIVATE KEY-----", og lagre det i en egen fil kalt "private.key"
- Du skal nå ha to filer seende omtrent slik ut:
cert.pem
-----BEGIN CERTIFICATE-----
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
-----END CERTIFICATE-----
private.key
-----BEGIN PRIVATE KEY-----
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablablabla
blablablablablablabalabblablablablablablabalabblablablablublabla
blablablablablablabalabblablablablablablabalabblablablablablabla
-----END PRIVATE KEY-----
- Merk deg hvor du lagrer filene (og lagre de meget sikkert)
- Naviger i en terminal til der du har lagret cert.pem og private.key
- Kjør kommando
node
- Kjør kommando
const fs=require('fs');console.log(Buffer.from(fs.readFileSync('./cert.pem')).toString('base64'))
- Lagre outputen på en trygg plass som
MASKINPORTEN_CERT=<OUTPUT>
- Kjør kommando
console.log(Buffer.from(fs.readFileSync('./private.key')).toString('base64'))
- Lagre outputen på en trygg plass som
MASKINPORTEN_PRIVATE_KEY=<OUTPUT>
- !!! Hvis du nå har lagret alt lokalt bør du slette sertifikatene + "cert.pem" + "private.key". Base64-nøklene er alt du trenger. Sertifikatene skal ikke ligge å slenge rundt.
- For å få en token fra maskinporten kan man gjøre følgende:
const options = {
url: 'url for hente token fra maskinporten', // Sjekk ulike endepunkter her: https://docs.digdir.no/docs/Maskinporten/maskinporten_func_wellknown.html
pemcert: 'et PEM sertifikat som BASE64',
pemprivateKey: 'en PEM privat nøkkel som BASE64',
audience: 'https://maskinporten.no', // // Sjekk ulike audience her: https://docs.digdir.no/docs/Maskinporten/maskinporten_func_wellknown.html
issuer: 'klientID-guid fra maskinporten klienten du har satt opp',
scope: 'prefix:scope', // Scopet du vil ha token for
}
try {
const token = await maskinportenToken(options)
console.log(token)
} catch (error) {
console.log('Something went wrong. ', error)
}
Rename sertifikatet fra .p12 til .pfx. Tada.
- For å få en token fra maskinporten kan man gjøre følgende:
const options = {
url: 'url for hente token fra maskinporten', // Sjekk ulike endepunkter her: https://docs.digdir.no/docs/Maskinporten/maskinporten_func_wellknown.html
pfxcert: 'et PFX sertifikat som BASE64',
privateKeyPassphrase: 'krypertingspassordet for sertifikatets privatekey',
audience: 'https://maskinporten.no', // // Sjekk ulike audience her: https://docs.digdir.no/docs/Maskinporten/maskinporten_func_wellknown.html
issuer: 'klientID-guid fra maskinporten klienten du har satt opp',
scope: 'prefix:scope', // Scopet du vil ha token for
}
try {
const token = await maskinportenToken(pfxOptions)
console.log(token)
} catch (error) {
console.log('Something went wrong. ', error)
}