https://github.com/vtfk/maskinportenauth
For getting access tokens from maskinporten
https://github.com/vtfk/maskinportenauth
Last synced: 2 months ago
JSON representation
For getting access tokens from maskinporten
- Host: GitHub
- URL: https://github.com/vtfk/maskinportenauth
- Owner: vtfk
- License: mit
- Created: 2022-03-04T13:57:15.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-02-23T07:57:29.000Z (about 1 year ago)
- Last Synced: 2024-05-28T14:58:53.289Z (12 months ago)
- Language: JavaScript
- Size: 446 KB
- Stars: 0
- Watchers: 0
- Forks: 1
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# maskinportenAuth
For getting access tokens from maskinporten*Tar denne på norsk, siden maskinporten er norsk*
## Nyttige lenker
- [Ta i bruk maskinporten som konsument](https://samarbeid.digdir.no/maskinporten/konsument/119) (Registrering og sånt)
- [Maskinporten dokumentasjon](https://docs.digdir.no/docs/Maskinporten/)## Installasjon
```bash
npm i @vtfk/maskinporten-auth
```Mer spesifikke steg beskrives under
## Bruk
**Du må ha på plass sertifikater og nøkler før du kan bruke denne pakka.** Se avsnitt [Oppsett](#oppsett)
```js
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)
}
```## Oppsett
### Forutsetninger
- Bruker på [Samarbeidsportalen](https://samarbeid.digdir.no/). (For prod må man få [delegert tilgang fra Altinn hovedadministrator](https://docs.digdir.no/docs/Maskinporten/maskinporten_sjolvbetjening_web.html))
- [Virksomhetssertifikat](https://www.altinn.no/hjelp/profil/avanserte-innstillinger/hva-er-virksomhetssertifikat/) for din organisasjon - et for prod, og et for test.### 1. Sett opp integrasjon i selvbetjeningsportalen
- Logg på [Samarbeidsportalen](https://samarbeid.digdir.no/). 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](https://docs.digdir.no/docs/Maskinporten/maskinporten_sjolvbetjening_web.html#innlogging-scopesapier))
- 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)### 2. Gjør klar sertifikat for å gjøre spørringer om access token
- 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
#### 2.1 PEM
##### 2.1.1 Konvertere P12 til PEM
- Lagre sertifikatet du skal bruke sikkert et sted du kan kjøre openssl (UNIX) (hvis du har Windows - bruk [WSL](https://docs.microsoft.com/en-us/windows/wsl/install))
- 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:
-----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 = xxxxxxxxxissuer=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-----
```##### 2.1.2 Hent ut relevant sertifikat og tilhørende nøkkel
- Mot Maskinporten er du ute etter sertifikat og key av typen `friendlyName: Authentication certificate` eller `friendlyName: 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)
##### 2.1.3 Konverter cert.pem og private.key til base64-strings
- 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=`
- Kjør kommando
```
console.log(Buffer.from(fs.readFileSync('./private.key')).toString('base64'))
```
- Lagre outputen på en trygg plass som `MASKINPORTEN_PRIVATE_KEY=`
- **!!! 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.#### 2.1.4 Sette opp spørring mot maskinporten
- For å få en token fra maskinporten kan man gjøre følgende:```js
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)
}
```### 2.2 PFX (denne er chillest)
#### 2.2.1 Konvertere P12 til PFX
Rename sertifikatet fra .p12 til .pfx. Tada.
#### 2.1.4 Sette opp spørring mot maskinporten
- For å få en token fra maskinporten kan man gjøre følgende:```js
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)
}
```