Integrasjon av Altinn-app med Maskinporten
Hvordan sette opp en integrasjon mellom en Altinn-app og Maskinporten.
Denne veiledningen viser hvordan du setter opp en Altinn-applikasjon til å bruke den innebygde Maskinporten-klienten (IMaskinportenClient
) for å utføre autoriserte forespørsler på vegne av eieren av applikasjonen, i stedet for den aktive brukeren.
For å sette dette opp, må følgende gjøres:
- Sørg for at organisasjonen har tilgang til Azure Key Vault.
- Opprett integrasjonen mot Maskinporten i Samarbeidsportalen.
- Lagre autentiseringsnøkkelen for integrasjonen i Azure Key Vault.
- Sett opp applikasjonen til å bruke Maskinporten-klienten og hente hemmeligheter fra Azure Key Vault.
Tilgang til Azure Key Vault
Før du går videre med denne veiledningen, må du forsikre deg om at du har tilgang til Azure Key Vault for organisasjonen din. Dette sikrer at nøklene som opprettes senere i veiledningen kan lagres riktig som hemmeligheter i Azure.
Hvis tilgang mangler, se Tilgang til logger og hemmeligheter.
Maskinporten-integrasjon
I denne delen skal vi sette opp Maskinporten-klienten. En del av oppsettet inkluderer opprettelse av nøkler som senere skal lagres i Azure Key Vault. Hvis ulike personer i organisasjonen har tilgang til forskjellige ressurser som trengs i denne prosessen, anbefales det å samarbeide og utføre disse trinnene på samme maskin. Dette er for å unngå å sende hemmeligheter mellom maskiner.
Når tilgang til å opprette hemmeligheter i Azure Key Vault er bekreftet, kan du fortsette med å opprette integrasjonen.
Konfigurasjon av Azure Key Vault
Når applikasjonen forberedes til å bruke hemmeligheter fra Azure Key Vault, må følgende trinn utføres:
Legg til hemmelighetene som ble hentet under konfigurasjon av Maskinporten-klienten, i Azure Key Vault:
- Base64-kodet JWT offentlig og privat nøkkelpar
- Klient-ID for integrasjonen
Det er viktig at navnet på disse hemmelighetene i Azure Key Vault tilsvarer navnet på seksjonen i appsettings-filen i kodebasen til applikasjonen.
For eksempel, hvis seksjonen for Maskinporten-integrasjonen ser slik ut:
{ "MaskinportenSettings": { "Authority": "https://test.maskinporten.no/", "ClientId": "", "JwkBase64": "" } }
Må hemmelighetene i Azure Key Vault ha navn som dette:
MaskinportenSettings--Authority MaskinportenSettings--ClientId MaskinportenSettings--JwkBase64
For at applikasjonen skal kunne lese hemmelighetene fra Azure Key Vault, må konfigureres først. Se seksjoner om hemmeligheter for hvordan dette oppnås.
Legg til appsettings-eksempelet ovenfor i
appsettings.{env}.json
-filen.
NB: Hemmelighetene leses av applikasjonen ved oppstart, så hvis du endrer hemmelighetene etter at applikasjonen er publisert, må du publisere applikasjonen på nytt før endringene trer i kraft.
Sett opp applikasjonen til å bruke Maskinporten-integrasjonen
Applikasjonen inkluderer automatisk den innebygde IMaskinportenClient
som kan brukes i tjenestene dine. Klienten finner og bruker automatisk MaskinportenSettings
-konfigurasjonen.
Hvis du trenger å bruke en annen konfigurasjonsbane enn standardbanen, kan du konfigurere den i RegisterCustomAppServices
-metoden:
void RegisterCustomAppServices(IServiceCollection services, IConfiguration config, IWebHostEnvironment env)
{
// ...
services.ConfigureMaskinportenClient(
"YourCustomMaskinportenSettingsPath"
);
}
For typede HTTP-klienter som trenger Maskinporten-autorisasjon, kan du bruke utvidelsesmetodene:
void RegisterCustomAppServices(IServiceCollection services, IConfiguration config, IWebHostEnvironment env)
{
// ...
// For eksterne API-er som krever rå Maskinporten-tokens
services.AddHttpClient<YourCustomClient>().UseMaskinportenAuthorisation("scope:1", "scope:2");
// For Altinn API-er som krever Altinn-tokens (veksler Maskinporten-token)
services.AddHttpClient<YourCustomClient2>().UseMaskinportenAltinnAuthorisation("scope:1", "scope:2");
}
Deretter må vi legge til Azure Key Vault som konfigurasjonsleverandør til vår host. Dette gjøres ved å legge til den markerte koden etter ConfigureWebHostBuilder
metoden:
ConfigureWebHostBuilder(IWebHostBuilder builder);
// Add Azure KV provider for TT02 & Prod environments
if (!builder.Environment.IsDevelopment())
{
builder.AddAzureKeyVaultAsConfigProvider();
}