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 en Maskinporten-integrasjon i selvbetjeningsportalen.
- 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 forbindelse med dette, anbefales det å samarbeide og utføre disse trinnene på samme maskin. På den måten unngår man å sende hemmeligheter mellom personer og 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. F.eks. hvis din appsettings-seksjon for Maskinporten-integrasjonen ser slik ut:
{ "MaskinportenSettings": { "Authority": "https://test.maskinporten.no/", "ClientId": "", "JwkBase64": "" } }
Skal 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å den konfigureres til å gjøre det. Se secrets-seksjonen for å oppnå dette.
Legg til appsettings-eksempelet ovenfor i
appsettings.{env}.json
-filen.
Merk: Hemmelighetene leses av applikasjonen ved oppstart, så hvis du gjør endringer etter at applikasjonen er publisert, må du publisere applikasjonen på nytt for at de skal tre i kraft.
Applikasjonsoppsett
Applikasjonen inkluderer automatisk den innebygde IMaskinportenClient
som kan brukes i tjenestene dine.
Konfigurasjonsstier
Klienten vil automatisk lete etter en Maskinporten-konfigurasjon på standardstien “MaskinportenSettings”. Hvis du ønsker å bruke en annen sti, kanskje fordi du administrerer flere apper og hver av dem trenger ulik autorisasjon, kan du konfigurere dette via ConfigureMaskinportenClient
-metoden.
void RegisterCustomAppServices(IServiceCollection services, IConfiguration config, IWebHostEnvironment env)
{
// ...
services.ConfigureMaskinportenClient(
"YourCustomMaskinportenSettingsPath"
);
}
Autorisering av Http-klienter
Typede og navngitte Http-klienter kan autoriseres med de tilgjengelige utvidelsesmetodene, som illustrert nedenfor.
void RegisterCustomAppServices(IServiceCollection services, IConfiguration config, IWebHostEnvironment env)
{
// ...
// For external APIs that require raw Maskinporten tokens
services.AddHttpClient<CustomClient1>().UseMaskinportenAuthorization("scope1", "scope2");
services.AddHttpClient("named-client1").UseMaskinportenAuthorization("scope1", "scope2");
// For Altinn APIs that require Altinn tokens (exchanges Maskinporten token)
services.AddHttpClient<CustomClient2>().UseMaskinportenAltinnAuthorization("scope1", "scope2");
services.AddHttpClient("named-client2").UseMaskinportenAltinnAuthorization("scope1", "scope2");
}
Manuell bruk
Hvis du trenger å hente et Maskinporten-token manuelt, kan du bruke IMaskinportenClient
i tjenesten din og hente tokens med GetAccessToken
- og GetAltinnExchangedToken
-metodene.
public class Example(IMaskinportenClient maskinportenClient) : IProcessTaskEnd
{
public async Task End(string taskId, Instance instance)
{
var maskinportenToken = await maskinportenClient.GetAccessToken(["scope1", "scope2"]);
var altinnExchangedToken = await maskinportenClient.GetAltinnExchangedToken(["scope1", "scope2"]);
// Do something with the tokens...
}
}
Key Vault-konfigurasjon
Til slutt må vi legge til Azure Key Vault-konfigurasjonsleverandøren 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();
}