Gå til hovedinnhold

Serverapplikasjoner

Her kan du finne ut hvordan du skal autentisere brukerne av din serverapplikasjon ved hjelp av HelseID.

Klientkonfigurasjon i HelseID

Hvis du vil bruke HelseID for å autentisere brukerne av din ASP.Net MVC applikasjon må du først opprette en konfigurasjon i HelseID.

Når du har fått konfigurasjonsdata fra HelseID kan du konfigurere applikasjonen din.

Autentiseringsflyt

Når du autentiserer brukere i en ASP.NET Mvc applikasjon med OpenId Connect skal du benytte en flyt som kalles Authorization Code Flow. Dette innebærer blant annet at din client (appen din) må autentisere seg selv i tjenesten vår før den får lov til å autentisere brukerne via HelseID og motta sikkerhetsbilletter fra HelseID.

Konfigurasjonen du mottar fra HelseID vil derfor inneholde en hemmelighet eller passord. Denne må du håndtere på en god måte, på lik linje med passord til databaser og lignende. Les mer om hvordan du skal håndtere hemmeligheter i avsnittet om Hemmeligheter.

Eksempel på Implementasjon

Opprett et nytt ASP.NET Web Application prosjekt (Full Framework, f.eks. .NET Framework 4.6).

Velg MVC prosjekt, velg “change authentication” - “No Authentication”.

 

Installer nødvendige Nuget pakker

Åpne “Package Manager Console” og installer følgende pakker ved å skrive disse nuget-kommandoene:

“Install-Package Microsoft.Owin.Security.Cookies”
“Install-Package Microsoft.Owin.Security.OpenIdConnect”

 

OpenId Connect som OWIN mellomvare

Hvis den ikke allerede finnes må du legge til en startup.cs fil, hvor OWIN konfigurasjonen gjøres.

Høyreklikk på prosjektet, velg “Add” -> “Add New Item” -> “OWIN Startup class” Kall filen Startup.cs og trykk “Add”.

Åpne Startup.cs og legg til “using Microsoft.Owin.Security” i toppen av filen.

I metoden public void Configuration(IAppBuilder app) kan du nå legge til mellomvaren som håndterer cookies for applikasjonen:

public void Configuration(IAppBuilder app)
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions());
}

 

Neste skritt er å legge til mellomvaren som håndterer protokollflyten for OpenId Connect som applikasjonen vil bruke for å snakke med HelseID. Her legger du inn konfigurasjonen du har fått fra HelseID.

        
public void Configuration(IAppBuilder app)
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions());

    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                Authority = "https://helseid.nhn.no",                
                ClientId = "din_client_id",
                RedirectUri = "https://din_url.no/",
                ResponseType = "code",
                Scope = "openid profile https://nhn.no/scopes/hpr",
                SignInAsAuthenticationType = "Cookies"
            });
}

 

Det kan være greit å forstå hva de ulike elementene i konfigurasjonen betyr:

  • Authority = Autoriteten som utsteder sikkerhetsbilletter (i dette tilfellet - HelseID).
  • ClientId = En unik identifikator for din applikasjon som opprettes i og av HelseID.
  • RedirectUri = En adresse du vil at HelseID skal sende brukeren tilbake til når han er ferdig autentisert. Denne må være konfigurert og kjent for HelseID.
  • ResponseType = Her angir du hvilken flyt du ønsker å bruke i kommunikasjonen med HelseID.
  • SignInAsAuthenticationType = Hvordan du ønsker å håndtere sesjonen din.
  • Scope = Her indikerer du ovenfor HelseID hvilken informasjon du ønsker at identitets token-et (id_token) skal inneholde.

    Eksempelet over viser tre scope for openid connect: openid, profile og https://nhn.no/scopes/hpr.
    Disse tre resulterer hver for seg i noen claims som ligger i tokenet appen din mottar fra HelseID.

    • openid: “sub”
    • profile: FirstName, LastName, FullName
    • https://nhn.no/scopes/hpr: hrp-nummer

Hvordan beskytte applikasjonen din?

Nå når konfigurasjonen din er på plass kan du beskytte applikasjonen ved å kreve autentisering via HelseID. Dette kan du gjøre ved å legge til en [Authorize] header på controller-ene dine:

    [Authorize]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";
            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";
            return View();
        }
    }

Når brukeren nå forsøker å åpne et av view-ene som tilhører HomeController vil brukeren bli autentisert via HelseID, og dersom autentiseringen er vellykket vil du nå ha tilgang på informasjon om brukeren via claims som ligger i id_tokenet som HelseID returnerte.

Claims som ligger i id_tokenet kan du nå hente i metodene i controller-en din:

            
var claimsPrincipal = User as ClaimsPrincipal;
if (claimsPrincipal != null)
{
    IEnumerable claims = claimsPrincipal.Claims;
}