• +45 4949 9091
  • Support
  • Språk
    • Språk
    • English
    • Dansk
    • Svenska
    • Norsk
    • Deutsch
    • Nederlands
    • Polski
    • Français
    • Español
    • Italiano
    • Português
  • Registrer
  • Logg inn
FoxIDs logo
  • Plattform
    • Distribusjon
    • Multi-tenant
    • Identitetslogikk
    • Compliance
  • Bruksområder
    • Oversikt
    • Kunder
    • Ansatte
    • Partnere
    • Kundehistorier
  • Tjenester
  • Priser
  • Docs & verktøy
    • Dokumentasjon
    • Artikler
    • JWT-verktøy
    • SAML 2.0-verktøy
    • Sertifikatverktøy
  • Kontakt oss
  • Registrer
  • Logg inn

ITfoxtec Identity SAML 2.0

Den åpne kildekodepakken ITfoxtec Identity Saml2 legger til SAML 2.0 / SAML-P-støtte for .NET-applikasjoner som må fungere som Identity Provider (IdP), Service Provider (SP) eller Relying Party (RP).

ITfoxtec Identity Saml2 er nyttig når SAML 2.0 skal implementeres direkte i applikasjonen. Pakken støtter SAML 2.0 innlogging, utlogging, single logout, metadata, Redirect Binding, POST Binding, Artifact Binding, signering og validering av meldinger, ECDSA-signaturer på støttede moderne mål for .NET samt konfigurerbar kryptering og dekryptering av assertions.

Firmanavnet ITfoxtec er endret til FoxIDs, men komponentene vil foreløpig beholde ITfoxtec navnet som en del av komponentnavnet.

Støtte

Still spørsmål på Stack Overflow og tagg med 'itfoxtec-identity-saml2'.

For implementeringshjelp eller arkitekturråd, send e-post til contact@foxids.com.

Pakke

Utgivelser NuGet ITfoxtec Identity SAML 2.0 NuGet ITfoxtec Identity SAML 2.0 MVC NuGet ITfoxtec Identity SAML 2.0 MVC Core

Kode og lisens

Kode på GitHub Testeksempler på GitHub Åpen kildekode lisens

Når FoxIDs er relevant

Det finnes to praktiske veier. Bruk open source-biblioteket når SAML 2.0 skal implementeres direkte i din .NET-applikasjon. Hvis applikasjonen allerede støtter OpenID Connect eller WS-Federation, kan FoxIDs håndtere SAML 2.0-integrasjonen eksternt mens applikasjonen fortsetter å bruke sin eksisterende protokoll.

  • Behold applikasjoner på OpenID Connect eller WS-Federation mens FoxIDs håndterer SAML 2.0-forbindelsen
  • Drift protokolloversettelse, sertifikater, metadata og partnerspesifikk federation-konfigurasjon utenfor applikasjonen
  • Bruk FoxIDs Cloud, self-hosted eller hybrid deployment avhengig av driftskrav
  • FoxIDs bruker ITfoxtec.Identity.Saml2 til SAML 2.0-protokollhåndtering, slik at biblioteket og bridge-alternativet er teknisk samkjørt
SAML 2.0 bridge-dokumentasjon Snakk med en ekspert Kom i gang gratis

Testede miljøer

ITfoxtec Identity Saml2 pakken er testet for samsvar med Microsoft Entra ID (Azure AD), AD FS, Azure AD B2C, den danske NemLog-in3 (MitID), den danske Context Handler (på dansk kalt Fælleskommunal Adgangsstyring) og mange andre IdP-er og RP-er.

ASP.NET MVC og ASP.NET Core MVC støttes av ITfoxtec Identity SAML 2.0 MVC- og MVC Core-pakkene, som hjelper med å integrere ITfoxtec SAML 2.0-pakken i MVC- og ASP.NET Core MVC-applikasjoner.

Støttede .NET versjoner

.NET 10.0 .NET 9.0 .NET 8.0 .NET 7.0 .NET 6.0 .NET Standard 2.1 .NET Framework 4.6.2 .NET Framework 4.8

Støttede bindinger

  • Redirect Binding
  • Post Binding
  • Artifact Binding

Bindingene kan brukes etter behov for:

  • Authn Request
  • Authn Response (SAML 2.0 Response)
  • Logout Request
  • Logout Response

Signeringsalgoritmer

SHA1/SHA256/SHA384/SHA512 er støttet for melding signering.

RSA SHA1 RSA SHA256 RSA SHA384 RSA SHA512 RSA-PSS SHA256 ECDSA SHA256 ECDSA SHA384 ECDSA SHA512
Vis algoritme-URI-er
  • RSA SHA1http://www.w3.org/2000/09/xmldsig#rsa-sha1
  • RSA SHA256http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
  • RSA SHA384http://www.w3.org/2001/04/xmldsig-more#rsa-sha384
  • RSA SHA512http://www.w3.org/2001/04/xmldsig-more#rsa-sha512
  • RSA-PSS SHA256http://www.w3.org/2007/05/xmldsig-more#sha256-rsa-MGF1
  • ECDSA SHA256http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256
  • ECDSA SHA384http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha384
  • ECDSA SHA512http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha512

Konfigurerbar kryptering

Assertion-kryptering kan konfigureres separat for datakryptering og nøkkelkryptering. Støttede alternativer inkluderer AES-CBC, AES-GCM, RSA key transport og XML Encryption 1.1 RSA-OAEP med validerte MGF-parametere.

Data
AES-CBC AES-GCM
Key
RSA 1.5 RSA-OAEP RSA-OAEP 1.1

Du kan bruke SAML 2.0 verktøyet til å dekode tokens og lage selvsignerte sertifikater med sertifikatverktøyet.

Kode

Koden som vises er bare et utvalg av eksempel koden i GitHub.

ITfoxtec Identity Saml2-pakken integreres i en ASP.NET Core MVC Relying Party (RP)-applikasjon ved konfigurasjon i Startup og ved å legge til en Auth Controller med følgende metoder. Bindingen som vises kan endres etter behov avhengig av kravene.

Det er videre mulig å sette noen valgfrie parametere på Saml2AuthnRequest og Saml2LogoutRequest. På Saml2AuthnRequest støttes for eksempel ForceAuthn, som vil tvinge brukeren til å skrive inn innloggingsopplysninger selv om en SSO kontekst allerede eksisterer på Security Token Service (STS) / Identity Provider (IdP).


Legg til konfigurasjon i ConfigureServices metoden i Startup

Konfigurasjon med IdP metadata.
services.BindConfig<Saml2Configuration>(Configuration, "Saml2", (serviceProvider, saml2Configuration) =>
{
    saml2Configuration.SigningCertificate = CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath(
        Configuration["Saml2:SigningCertificateFile"]), Configuration["Saml2:SigningCertificatePassword"]);
    saml2Configuration.AllowedAudienceUris.Add(saml2Configuration.Issuer);

    var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
    var entityDescriptor = new EntityDescriptor();
    entityDescriptor.ReadIdPSsoDescriptorFromUrlAsync(httpClientFactory, new Uri(Configuration["Saml2:IdPMetadata"])).GetAwaiter().GetResult();
    if (entityDescriptor.IdPSsoDescriptor != null)
    {
        saml2Configuration.AllowedIssuer = entityDescriptor.EntityId;
        saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location;
        saml2Configuration.SingleLogoutDestination = entityDescriptor.IdPSsoDescriptor.SingleLogoutServices.First().Location;
        saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates);
    }
    else
    {
        throw new Exception("IdPSsoDescriptor not loaded from metadata.");
    }
    return saml2Configuration;
});
services.AddSaml2();
services.AddHttpClient();

Konfigurasjon uten metadata.
services.BindConfig<Saml2Configuration>(Configuration, "Saml2", (serviceProvider, saml2Configuration) =>
{
    saml2Configuration.SigningCertificate = CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath(
        Configuration["Saml2:SigningCertificateFile"]), Configuration["Saml2:SigningCertificatePassword"]);
    saml2Configuration.AllowedAudienceUris.Add(saml2Configuration.Issuer);

    saml2Configuration.SignatureValidationCertificates.Add(CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath(
        Configuration["Saml2:SignatureValidationCertificateFile"])));
    return saml2Configuration;
});
services.AddSaml2();   

Login metode i Auth Controller

[Route("Login")]
public IActionResult Login(string returnUrl = null)
{
    var binding = new Saml2RedirectBinding();
    binding.SetRelayStateQuery(new Dictionary<string, string> 
        { { relayStateReturnUrl, returnUrl ?? Url.Content("~/") } });

    return binding.Bind(new Saml2AuthnRequest(config)).ToActionResult();
}

AssertionConsumerService metode i Auth Controller

Etter en vellykket eller mislykket innlogging mottar ACS-metoden svaret.
[Route("AssertionConsumerService")]
public async Task<IActionResult> AssertionConsumerService()
{       
    var httpRequest = Request.ToGenericHttpRequest(validate: true);
    var saml2AuthnResponse = new Saml2AuthnResponse(config);

    httpRequest.Binding.ReadSamlResponse(httpRequest, saml2AuthnResponse);
    if (saml2AuthnResponse.Status != Saml2StatusCodes.Success)
    {
        throw new AuthenticationException($"SAML Response status: {saml2AuthnResponse.Status}");
    }
    httpRequest.Binding.Unbind(httpRequest, saml2AuthnResponse);
    await saml2AuthnResponse.CreateSessionAsync(HttpContext,
        claimsTransform: (claimsPrincipal) => Task.FromResult(ClaimsTransform.Transform(claimsPrincipal)));

    var relayStateQuery = httpRequest.Binding.GetRelayStateQuery();
    var returnUrl = relayStateQuery.ContainsKey(relayStateReturnUrl) ? relayStateQuery[relayStateReturnUrl] : Url.Content("~/");
    return Redirect(returnUrl);
}

Logout metode i Auth Controller

[HttpPost("Logout")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Logout()
{
    if (!User.Identity.IsAuthenticated)
    {
        return Redirect(Url.Content("~/"));
    }

    var binding = new Saml2PostBinding();
    var saml2LogoutRequest = await new Saml2LogoutRequest(config, User).DeleteSession(HttpContext);
    return binding.Bind(saml2LogoutRequest).ToActionResult();
}

LoggedOut metode i Auth Controller

Etter en vellykket eller mislykket utlogging mottar LoggedOut-metoden svaret.
[Route("LoggedOut")]
public IActionResult LoggedOut()
{
    var httpRequest = Request.ToGenericHttpRequest(validate: true);
    httpRequest.Binding.Unbind(httpRequest, new Saml2LogoutResponse(config));

    return Redirect(Url.Content("~/"));
}

SingleLogout metode i Auth Controller

Mottar en forespørsel om Single Logout og sender et svar.
[Route("SingleLogout")]
public async Task<IActionResult> SingleLogout()
{
    Saml2StatusCodes status;
    var httpRequest = Request.ToGenericHttpRequest(validate: true);
    var logoutRequest = new Saml2LogoutRequest(config, User);
    try
    {
        httpRequest.Binding.Unbind(httpRequest, logoutRequest);
        status = Saml2StatusCodes.Success;
        await logoutRequest.DeleteSession(HttpContext);
    }
    catch (Exception exc)
    {
        // log exception
        Debug.WriteLine("SingleLogout error: " + exc.ToString());
        status = Saml2StatusCodes.RequestDenied;
    }

    var responseBinding = new Saml2PostBinding();
    responseBinding.RelayState = httpRequest.Binding.RelayState;
    var saml2LogoutResponse = new Saml2LogoutResponse(config)
    {
        InResponseToAsString = logoutRequest.IdAsString,
        Status = status,
    };
    return responseBinding.Bind(saml2LogoutResponse).ToActionResult();
}
FoxIDs logo

Utviklet i Danmark. Driftet i Europa.

Utviklere

  • Dokumentasjon
  • Artikler
  • Utgivelser
  • Skystatus

Produkt

  • Priser
  • Tjenester
  • Distribusjon
  • Compliance
  • Tillitssenter

Selskap

  • Om
  • SKI-leverandør
  • Kontakt oss

Juridisk

  • Bruksvilkår
  • Vilkår for selvhosting
  • GDPR og databeskyttelsesavtale
  • Personvern- og informasjonskapselpolicy
© 2026 FoxIDs, versjon 2.15.19
GitHub LinkedIn

Valg av cookies

FoxIDs bruker nødvendige cookies for at nettstedet skal fungere. Velg Godta alle for også å tillate analysecookies som hjelper oss med å forstå og forbedre nettstedet, eller Avvis alle for å bruke bare nødvendige cookies. Du kan når som helst endre valget ditt i personvern- og cookiepolicyen vår.

Les personvern- og cookiepolicyen