Geonorge.AuthLib.Common 2.0.0-alpha4

This is a prerelease version of Geonorge.AuthLib.Common.
dotnet add package Geonorge.AuthLib.Common --version 2.0.0-alpha4
                    
NuGet\Install-Package Geonorge.AuthLib.Common -Version 2.0.0-alpha4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Geonorge.AuthLib.Common" Version="2.0.0-alpha4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Geonorge.AuthLib.Common" Version="2.0.0-alpha4" />
                    
Directory.Packages.props
<PackageReference Include="Geonorge.AuthLib.Common" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Geonorge.AuthLib.Common --version 2.0.0-alpha4
                    
#r "nuget: Geonorge.AuthLib.Common, 2.0.0-alpha4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Geonorge.AuthLib.Common@2.0.0-alpha4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Geonorge.AuthLib.Common&version=2.0.0-alpha4&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Geonorge.AuthLib.Common&version=2.0.0-alpha4&prerelease
                    
Install as a Cake Tool

Geonorge.AuthLib

Autentisering og autoriseringsbibliotek for applikasjoner i Geonorge

Biblioteket har to deler:

  • Geonorge.AuthLib.Common
    • Felles logikk og hjelpeklasser for uthenting av brukerinformasjon fra BaatAuthz-apiet.
  • Geonorge.AuthLib.NetFull
    • Gjenbrukbar konfigurasjon for .net framework applikasjoner

Bruk av biblioteket i en .net framework applikasjon

De fleste av Geonorges applikasjoner benytter Autofac for dependency injection. Derfor benytter også dette biblioteket Autofac.

Installer disse pakkene i prosjektet:

Install-Package Geonorge.AuthLib.NetFull
Install-Package Microsoft.Owin.Host.SystemWeb
Install-Package Autofac.Mvc5.Owin

Geonorge.AuthLib.NetFull ligger tilgjengelig som en nuget-pakke på byggeserveren til Geonorge.

Opprett en Startup.cs

I prosjektrota må det være en Startup.cs som konfigurere Autofac og Geonorge.AuthLib.

Eksempel fra MetadataEditoren:

using Autofac;
using Geonorge.AuthLib.NetFull;
using Kartverket.MetadataEditor.App_Start;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(Kartverket.MetadataEditor.Startup))]

namespace Kartverket.MetadataEditor
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Use Autofac as an Owin middleware
            var container = DependencyConfig.Configure(new ContainerBuilder());
            app.UseAutofacMiddleware(container);
            app.UseAutofacMvc();  // requires Autofac.Mvc5.Owin nuget package installed
            
            app.UseGeonorgeAuthentication();
        }
       
    }
}

Det er viktig at Autofac settes opp som Owin Middleware. Dette gjør vi for å kunne få tak i tjenesteklasser i løpet av autentiseringen av brukeren.

Konfigurasjon av Autofac

Autofac må ha beskjed om hvordan klassene til dette biblioteket skal instansieres. Dette gjøres ved å registrere en egen Autofac-modul i oppstarten.

  builder.RegisterModule<GeonorgeAuthenticationModule>();

builder er et objekt av typen Autofac.ContainerBuilder. I veldig mange av Geonorge-prosjektene har vi en egen DependencyConfig-klasse. Linjen over vil vi ofte plassere i denne klassen.

Tilrettelegge for bruk av netstandard2.0

Ordinære .net framework applikasjoner kan få en feilmelding om at System.Object is not found. Da må du tilrettelegge for at appen kan benytte netstandard2.0. Dette gjøres ved å legge til følgende i web.config:

  <system.web>
    ...
    <compilation debug="true" targetFramework="4.7.2">
      <assemblies>
        <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
      </assemblies>
    </compilation>
    ...
  </system.web>

Konfigurasjonsvariabler

Følgende konfigurasjonsvariabler må være definert i appsettings.config (evt. appsettings.json for .NET 8+) i applikasjonen:

  <add key="auth:oidc:ClientId" value="" />
  <add key="auth:oidc:ClientSecret" value="" />
  <add key="auth:oidc:Authority" value="" />
  <add key="auth:oidc:Issuer" value="" />
  <add key="auth:oidc:IntrospectionUrl" value="" />
  <add key="auth:oidc:RedirectUri" value="https://xxxx/signin-oidc" />
  <add key="auth:oidc:PostLogoutRedirectUri" value="https://xxxx/signout-callback-oidc" />
  <add key="auth:oidc:MetadataAddress" value="" />
  <add key="auth:oidc:BaatAuthzApiUrl" value=""/>
  <add key="auth:oidc:BaatAuthzApiCredentials" value=""/> 

Oppsett av innlogging og utlogging

Vi må deretter sette opp Controller-metoder for innlogging, utlogging og en callback for når logout-operasjonen har blitt gjennomført.

    public void SignIn()
    {
        var redirectUrl = Url.Action(nameof(HomeController.Index), "Home");
        HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = redirectUrl },
            OpenIdConnectAuthenticationDefaults.AuthenticationType);
    }

    public void SignOut()
    {
      var redirectUri = WebConfigurationManager.AppSettings["GeoID:PostLogoutRedirectUri"];
      HttpContext.GetOwinContext().Authentication.SignOut(
          new AuthenticationProperties {RedirectUri = redirectUri},
          OpenIdConnectAuthenticationDefaults.AuthenticationType,
          CookieAuthenticationDefaults.AuthenticationType);
    }

    /// <summary>
    /// This is the action responding to /signout-callback-oidc route after logout at the identity provider
    /// </summary>
    /// <returns></returns>
    public ActionResult SignOutCallback()
    {
        return RedirectToAction(nameof(RegistersController.Index), "Registers");
    }

For å få utlogging til å fungere må det konfigureres en signout-callback og dette har vi standardisert til å være ruten /signout-callback-oidc på samme måte som for innlogging (/signin-callback-oidc). Denne ruten for innlogging blir levert av Openid Connect biblioteket til Microsoft.

Eksempel på konfigurert callback rute i Registeret:

RouteConfig.cs

  routes.MapRoute("OIDC-callback-signout", "signout-callback-oidc", new { controller = "Home", action = "SignOutCallback"});

Hjelpeklasser

ClaimsPrincipal

Biblioteket inneholder noen utvidelser av ClaimsPrincipal-klassen for å gjøre uthenting av Claims enklere.

Eksempel:

string username = ClaimsPrincipal.Current.GetUsername();
string organization = ClaimsPrincipal.Current.GetOrganizationName();

Se eksempel på bruk av ClaimsPrincipal og ClaimsPrincipalUtility i MetadataEditoren. BaseController-klassen benytter flere av disse for å gi gode metoder som kan benyttes av de ordinære Controller-klassene.

GeonorgeRoles

Geonorge.AuthLib.Common.GenorgeRoles inneholder konstanter med rollenavn vi mottar fra Baat. Disse skal benyttes istedenfor "magiske strenger" rundt om i de ulike applikasjonene.

Geonorge.AuthLib.Common.GeonorgeClaims inneholder konstanter med navn på claims som ligger på brukeren. Benytt disse dersom du må hente ut claims - men vurder om ikke det er en hjelpemetode som kan benyttes isteden, evt implementer en ny hjelpemetode.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Geonorge.AuthLib.Common:

Package Downloads
Geonorge.AuthLib.NetFull

AuthN/AuthZ library for .NET Framework Geonorge Components.

Geonorge.AuthLib.NetCore

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.0-alpha4 137 9/9/2025
2.0.0-alpha3 115 9/9/2025
2.0.0-alpha2 121 9/8/2025
2.0.0-alpha1 161 6/26/2025

Merged content from Geonorge.AuthLib.NetCore