Gå til hovedinnhold

Automatisk valg av identitetstilbyder

Noen ganger ønsker du ikke at brukeren din skal kunne velge hvilken identitetstilbyder han vil logge seg inn hos, men framtvinge innlogging i en spesifikk identitetstilbyder.

Normalt vil HelseID presentere det som kalles en Home Realm Discovery for brukeren - dette er et skjermbilde som inneholder en liste over de tilgjengelige identitetstilbyderne i HelseID.

Men i noen tilfeller kan det hende at du ønsker å kreve at brukeren må logge seg inn hos en spesifikk identitetstilbyder. For eksempel kan det være nødvendig å kreve at brukerene alltid logger seg inn hos ID-Porten.

HelseID tilbyr en mekanisme som videresender deg automatisk til ønsket identitetstilbyder. Denne mekanismen innebærer at du må endre eller manipulere protokollmeldingen som brukes i autentiseringsforespørselen mot HelseID.

For å automatisk velge identitetstilbyder må du legge inn verdien "idp:navn_på_ønsket_idp" i parameteret acr_values i autentiseringsforespørselen.

HelseID tilbyr foreløpig én identitetstilbyder, men etter hvert vil vi tilby innlogging hos flere aktører i sektoren.

  • ID-Porten: acr_values="idp:idporten-oidc"

Implementasjon

Måten du påvirker protokollmeldingene avhenger av hvilket klientbibliotek eller mellomvare du bruker.

IdentityModel.OidcClient

var options = new OidcClientOptions()
            {
                Authority = "https://helseid-sts.test.nhn.no",
                ClientId = "min_client_id",
                RedirectUri = "min_redirect_uri",
                Scope = "openid",
                ClientSecret = "superhemmelig hemmelighet",                
            };
_client = new OidcClient(_options);
var state = await _client.PrepareLoginAsync(new {acr_values="idp:idporten-oidc"});

ASP.NET Core / Katana

For mellomvare som brukes i en serverapplikasjon kan man påvirke forespørselen ved å koble seg til autentiseringsflyten før den sendes til HelseID.

Mellomvaren tilbyr forskjellige events, og for å påvirke protokollmeldingen før den sendes til HelseID må man lage en funksjon for eventen som heter OnRedirectToIdentityProvider. I denne funksjonen kan man påvirke forskjellige parametre, blant annet acr_values som vi bruker for å angi ønsket identitetstilbyder.

Events = new OpenIdConnectEvents
{
    OnRedirectToIdentityProvider = redirectContext =>
    {
        redirectContext.ProtocolMessage.AcrValues = $"idp:idporten-oidc";
        
        return Task.CompletedTask;
    }
}

Eventene er definert i klassen OpenIdConnectOptions, og kan se slik ut:

var options = new OpenIdConnectOptions
{
    AuthenticationScheme = "oidc",
    SignInScheme = "Cookies",               

    Authority = "https://helseid-sts.test.nhn.no",
    RequireHttpsMetadata = false,

    ClientId = "min_client_id",
    ClientSecret = "min_hemmelige_hemmelighet",
    
    ResponseType = "code id_token",
    GetClaimsFromUserInfoEndpoint = true,
    
    SaveTokens = true,

    TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        NameClaimType = JwtClaimTypes.Name,
        RoleClaimType = JwtClaimTypes.Role,
    },

    Events = new OpenIdConnectEvents
    {
        OnRedirectToIdentityProvider = redirectContext =>
        {
            redirectContext.ProtocolMessage.AcrValues = $"idp:idporten-oidc";
            
            return Task.CompletedTask;
        }
    }
};