• +45 4949 9091
  • Support
  • Språk
    • Språk
    • English
    • Dansk
    • Svenska
    • Norsk
    • Deutsch
    • Nederlands
    • Polski
    • Français
    • Español
    • Italiano
    • Português
  • Registrera
  • Logga in
FoxIDs logotyp
  • Plattform
    • Driftsättning
    • Multi-tenant
    • Identitetslogik
    • Efterlevnad
  • Användningsfall
    • Översikt
    • Kunder
    • Medarbetare
    • Partner
    • Kundberättelser
  • Tjänster
  • Priser
  • Docs & verktyg
    • Dokumentation
    • Artiklar
    • JWT-verktyg
    • SAML 2.0-verktyg
    • Certifikatverktyg
  • Kontakta oss
  • Registrera
  • Logga in

ITfoxtec Identity SAML 2.0

Open source-paketet ITfoxtec Identity Saml2 lägger till SAML 2.0- / SAML-P-stöd för .NET-applikationer som behöver fungera som Identity Provider (IdP), Service Provider (SP) eller Relying Party (RP).

ITfoxtec Identity Saml2 är användbart när SAML 2.0 ska implementeras direkt i applikationen. Paketet stöder inloggning, utloggning och single logout med SAML 2.0, metadata, Redirect Binding, POST Binding, Artifact Binding, signering och validering av meddelanden, ECDSA-signaturer på moderna mål för .NET som stöds samt konfigurerbar kryptering och dekryptering av assertions.

Företagsnamnet ITfoxtec har ändrats till FoxIDs, men komponenterna kommer tills vidare att behålla ITfoxtec namnet som en del av komponentnamnet.

Support

Ställ frågor på Stack Overflow och tagga med 'itfoxtec-identity-saml2'.

För implementeringshjälp eller arkitekturrådgivning, mejla contact@foxids.com.

Paket

Utgåvor NuGet ITfoxtec Identity SAML 2.0 NuGet ITfoxtec Identity SAML 2.0 MVC NuGet ITfoxtec Identity SAML 2.0 MVC Core

Kod och licens

Kod på GitHub Testexempel på GitHub Öppen källkodslicens

När FoxIDs är relevant

Det finns två praktiska vägar. Använd open source-biblioteket när SAML 2.0 ska implementeras direkt i din .NET-applikation. Om applikationen redan stöder OpenID Connect eller WS-Federation kan FoxIDs hantera SAML 2.0-integrationen externt medan applikationen fortsätter att använda sitt befintliga protokoll.

  • Behåll applikationer på OpenID Connect eller WS-Federation medan FoxIDs hanterar SAML 2.0-anslutningen
  • Driv protokollöversättning, certifikat, metadata och partnerspecifik federation-konfiguration utanför applikationen
  • Använd FoxIDs Cloud, self-hosted eller hybrid deployment beroende på driftkrav
  • FoxIDs använder ITfoxtec.Identity.Saml2 för SAML 2.0-protokollhantering, så biblioteket och bridge-alternativet är tekniskt samordnade
SAML 2.0 bryggdokumentation Prata med en expert Kom igång gratis

Testade miljöer

ITfoxtec Identity Saml2 paketet är testat för efterlevnad med Microsoft Entra ID (Azure AD), AD FS, Azure AD B2C, danska NemLog-in3 (MitID), den danska Context Handler (på danska kallad Fælleskommunal Adgangsstyring) och många andra IdP:er och RP:er.

ASP.NET MVC och ASP.NET Core MVC stöds av ITfoxtec Identity SAML 2.0 MVC- och MVC Core-paketen, som hjälper till att integrera ITfoxtec SAML 2.0-paketet i MVC- och ASP.NET Core MVC-applikationer.

Stödda .NET versioner

.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ödda bindings

  • Redirect Binding
  • Post Binding
  • Artifact Binding

Bindings kan användas efter behov för:

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

Signeringsalgoritmer

SHA1/SHA256/SHA384/SHA512 stöds för meddelandesignering.

RSA SHA1 RSA SHA256 RSA SHA384 RSA SHA512 RSA-PSS SHA256 ECDSA SHA256 ECDSA SHA384 ECDSA SHA512
Visa algoritm-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 konfigureras separat för datakryptering och nyckelkryptering. Stödda alternativ omfattar AES-CBC, AES-GCM, RSA key transport och XML Encryption 1.1 RSA-OAEP med validerade MGF-parametrar.

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

Du kan använda SAML 2.0 verktyget för att avkoda tokens och skapa självsignerade certifikat med certifikatverktyget.

Kod

Koden som visas är bara ett urval av exempelkod i GitHub.

ITfoxtec Identity Saml2-paketet integreras i en ASP.NET Core MVC Relying Party (RP)-applikation genom konfiguration i Startup och genom att lägga till en Auth Controller med följande metoder. Bindningen som visas kan ändras vid behov beroende på kraven.

Det är dessutom möjligt att sätta vissa valfria parametrar på Saml2AuthnRequest och Saml2LogoutRequest. På Saml2AuthnRequest stöds till exempel ForceAuthn, vilket tvingar användaren att ange inloggningsuppgifter även om en SSO kontext redan finns på Security Token Service (STS) / Identity Provider (IdP).


Lägg till konfiguration i ConfigureServices metoden i Startup

Konfiguration 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();

Konfiguration utan 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 metod 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 metod i Auth Controller

Efter en lyckad eller misslyckad inloggning tar ACS-metoden emot 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 metod 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 metod i Auth Controller

Efter en lyckad eller misslyckad utloggning tar LoggedOut-metoden emot svaret.
[Route("LoggedOut")]
public IActionResult LoggedOut()
{
    var httpRequest = Request.ToGenericHttpRequest(validate: true);
    httpRequest.Binding.Unbind(httpRequest, new Saml2LogoutResponse(config));

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

SingleLogout metod i Auth Controller

Tar emot en begäran om Single Logout och skickar ett 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 logotyp

Utvecklad i Danmark. Hostad i Europa.

Utvecklare

  • Dokumentation
  • Artiklar
  • Utgåvor
  • Molnstatus

Produkt

  • Priser
  • Tjänster
  • Driftsättning
  • Efterlevnad
  • Förtroendecenter

Företag

  • Om
  • SKI-leverantör
  • Kontakta oss

Juridik

  • Användarvillkor
  • Villkor för självhostning
  • GDPR och dataskyddsavtal
  • Integritets- och cookiepolicy
© 2026 FoxIDs, version 2.15.19
GitHub LinkedIn

Cookieval

FoxIDs använder nödvändiga cookies för att webbplatsen ska fungera. Välj Acceptera alla för att även tillåta statistikcookies som hjälper oss att förstå och förbättra webbplatsen, eller Avvisa alla för att endast använda nödvändiga cookies. Du kan när som helst ändra ditt val i vår integritets- och cookiepolicy.

Läs integritets- och cookiepolicyn