Resultados de la búsqueda :

×

Configurar el inicio de sesión único (SSO) SAML en la aplicación desacoplada ASP.NET Core

Esta guía proporciona pasos detallados para configurar el inicio de sesión único (SSO) SAML en una aplicación de arquitectura desacoplada ASP.NET Core usando cualquier proveedor de identidad (IdP) compatible con SAML. El backend (ASP.NET Core) maneja la autenticación SSO, genera un token JWT y lo expone de forma segura a cualquier frontend (React, Angular, Vue, etc.).

Compatibilidad con plataformas: El middleware SAML de ASP.NET Core es compatible con ASP.NET Core 2.0 y versiones posteriores. Es compatible con todas las plataformas de ASP.NET Core, incluidas Windows, Linux y macOS.

Paquete NuGet
CLI de .NET

PM> NuGet\Install-Package miniOrange.SAML.SSO


Nota: Para integrar el middleware miniOrange ASP.NET SAML SSO en su aplicación, deberá agregar los siguientes espacios de nombres, servicios y middleware a su proyecto. A continuación, se muestra una implementación de ejemplo como referencia.

  using miniOrange.saml;
  using System.Reflection;
  var builder=WebApplication.CreateBuilder(args);
  // Add services to the container.
  builder.Services.AddRazorPages();
  builder.Services.AddAuthentication(options =>
  {
    options.DefaultAuthenticationScheme ="SS0_OR_Admin";
    options.DefaultScheme = "SSO_OR_Admin";
    options.DefaultChallengeScheme = "SSO_OR_Admin";
  })
  .AddCookie("moAdmin", options =>
  {
    
  })
  .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
  {
    
  })
  .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
  {
    options.TokenValidationParameters = new TokenValidationParameters
    {
      ValidateIssuer = true,
      ValidateAudience = true,
      ValidateLifetime = true,
      ValidateIssuerSigningKey = true,
      ValidIssuer = "your-issuer",
      ValidAudience = "your-audience",
      IssuerSigningKey = new
  SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
    };
  })
  .AddPolicyScheme("SSO_OR_Admin", "SSO_OR_Admin", options =>
  {
    options.ForwardDefaultSelector = context =>
    {
      // Check if Bearer token exists
      string authHeader = context.Request.Headers["Authorization"].FirstOrDefault() ?? "";
      if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("Bearer"))
      {
        return JwtBearerDefaults.AuthenticationScheme;
      }
      foreach (var cookie in context.Request.Cookies)
      {
         if (cookie.Key.Contains(".AspNetCore.Cookies") &&
        context.Request.Query["ssoaction"] != "config")
        {
          return CookieAuthenticationDefaults.AuthenticationScheme;
        }
    }
    return "moAdmin";
    };
  });
  var app = builder.Build();
  if(!app.Environment.IsDevelopment())
  {
    app.UseExceptionHandler("/Error");
    app.UseHsts();
  }
  app.UseHttpsRedirection();
  app.UseRouting();
  app.UseAuthorization();
  app.MapRazorPages();
  app.UseCookiePolicy();
  app.UseAuthentication();
  app.UseStaticFiles();
  app.UseminiOrangeSAMLSSOMiddleware();
  app.Run();
Paquete NuGet
CLI de .NET

PM> NuGet\Install-Package miniOrange.SAML.SSO


Nota: Para integrar el middleware miniOrange ASP.NET SAML SSO en su aplicación, deberá agregar los siguientes espacios de nombres, servicios y middleware en su proyecto; a continuación se muestra un ejemplo.

  using miniOrange.saml;
  using System.Reflection;
  public class Startup
  {
   public Startup(IConfiguration configuration)
   {
    Configuration = configuration;
   }
   public IConfiguration Configuration {get;}
   // This method gets called by the runtime. Use this method to add services to the container.
   public void ConfigureServices(IServiceCollection services)
   {
    services.AddRazorPages();
  services.AddAuthentication(options =>
  {
    options.DefaultAuthenticationScheme ="SS0_OR_Admin";
    options.DefaultScheme = "SSO_OR_Admin";
    options.DefaultChallengeScheme = "SSO_OR_Admin";
  })
  .AddCookie("moAdmin", options =>
  {
    
  })
  .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
  {
    
  })
  .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
  {
    options.TokenValidationParameters = new TokenValidationParameters
    {
      ValidateIssuer = true,
      ValidateAudience = true,
      ValidateLifetime = true,
      ValidateIssuerSigningKey = true,
      ValidIssuer = "your-issuer",
      ValidAudience = "your-audience",
      IssuerSigningKey = new
  SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
    };
  })
  .AddPolicyScheme("SSO_OR_Admin", "SSO_OR_Admin", options =>
  {
    options.ForwardDefaultSelector = context =>
    {
      // Check if Bearer token exists
      string authHeader = context.Request.Headers["Authorization"].FirstOrDefault() ?? "";
      if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("Bearer"))
      {
        return JwtBearerDefaults.AuthenticationScheme;
      }
      foreach (var cookie in context.Request.Cookies)
      {
         if (cookie.Key.Contains(".AspNetCore.Cookies") &&
        context.Request.Query["ssoaction"] != "config")
        {
          return CookieAuthenticationDefaults.AuthenticationScheme;
        }
    }
    return "moAdmin";
    };
  });
   }
   // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
   {
    if (env.IsDevelopment())
    {
     app.UseDeveloperExceptionPage();
    }
   else
    {
     app.UseExceptionHandler("/Error");
    app.UseHsts();
    }
   app.UseHttpsRedirection();
   app.UseCookiePolicy();
   app.UseAuthentication();
   app.UseStaticFiles();
   app.UseminiOrangeSAMLSSOMiddleware();
   app.UseRouting();
   app.UseAuthorization();
   app.UseEndpoints(endpoints =>
   {
    endpoints.MapRazorPages();
   });
  }
 }

Si experimenta problemas de CORS al realizar llamadas a la API, agregue el siguiente servicio y política.

builder.Services.AddCors(options =>
{
  options.AddPolicy("<policy-name>",policy =>
  {
    policy.WithOrigins("<your-origin>",policy)
      .AllowAnyHeader()
      .AllowAnyMethod()
      .AllowCredentials()
  });
});
//Add this in the middleware section
app.UseCors("<policy-name>");

Guía paso a paso para ASP.NET Core SAML SSO usando su proveedor de identidad.

  • En la sección Ajustes Plugin Pestaña, seleccione su proveedor de identidad de la lista que se muestra.
Inicio de sesión único (SSO) SAML de ASP.NET Core con miniOrange como IDP: agregar nuevo IDP

A continuación se detallan dos formas con las que puede configurar los metadatos de su proveedor de identidad SAML en el middleware.

A] Cargue metadatos usando el botón Cargar metadatos IDP:

  • Si su proveedor de identidad le ha proporcionado la URL de metadatos o el archivo de metadatos (solo en formato .xml), entonces puede simplemente configurar los metadatos del proveedor de identidad en el middleware usando el Cargar metadatos de IDP .
  • Copie la URL de metadatos o descargue el archivo de metadatos para configurarlo en el extremo de su proveedor de identidad.
  • Puede consultar la captura de pantalla a continuación:
ASP.NET Core: Cargar metadatos de IDP

  • Puedes elegir cualquiera de las opciones según el formato de metadatos que tengas disponible.

B] Configure los metadatos del proveedor de identidad manualmente:

  • Después de configurar su Proveedor de identidad, te proporcionará ID de entidad de IDP, URL de inicio de sesión único de IDP y Certificado SAML X509 campos respectivamente.
  • Haga clic en Guardar para guardar los datos de su IDP.
ASP.NET Core: configurar IDP manualmente
  • Haga clic en el elemento Configuración de prueba para probar si la configuración SAML que ha realizado es correcta.
  • La siguiente captura de pantalla muestra un resultado exitoso. Haga clic en Integración SSO para continuar con la integración SSO.
ASP.NET Core: configuración de pruebas

  • Si experimenta algún error en el extremo del middleware, se le mostrará una ventana similar a la siguiente.
ASP.NET Core: Error de configuración de prueba

  • Para solucionar el error, puede seguir los pasos a continuación:
  • En Solucionar problemas pestaña, habilite la opción para recibir los registros del complemento.
ASP.NET Core: Solución de problemas

  • Una vez habilitado, podrá recuperar los registros del complemento navegando a Ajustes Plugin pestaña y haciendo clic en Configuración de prueba.
  • Descargue nuestra archivo de registro del menú Solucionar problemas Pestaña para ver qué salió mal.
  • Puedes compartir el archivo de registro con nosotros en aspnetsupport@xecurify.com y nuestro equipo se comunicará con usted para resolver su problema.

  • Después de probar la configuración, asigne los atributos de su aplicación a los atributos del proveedor de identidad (IdP).
  • Nota: Todos los atributos mapeados se almacenarán en la sesión para que puedas acceder a ellos en tu aplicación.
ASP.NET Core: Asignación de atributos


  • Estos pasos le permiten recuperar la información del usuario SSO en su aplicación en forma de reclamos de usuario.
  • Nota: Este middleware de prueba solo admite información del usuario en reclamos, la recuperación de información del usuario en sesiones y encabezados está disponible en el complemento premium.
  • Cree un punto final GET en el lado .NET para devolver el token JWT después del inicio de sesión.
    Nota: Si tiene un método para crear un JWT, solo necesita seleccionar las reclamaciones de la cookie .NET.
    A continuación se muestra el código para su referencia:
  • [HttpGet("gettoken")]
    public string GetToken()
    {
      if(User.Identity!=null && User.Identity.IsAuthenticated)
      {
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes
        ("Your-JWT-secret-key"));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
        var identity = (ClaimsIdentity)User.Identity;
        var claims = identity.Claims;

        var token = new JwtSecurityToken(
          issuer:"<issuer-name>",
          audience:"<audience>",
          claims:claims,
          expires: DateTime.UtcNow.AddHours(1),
          signingCredentials: creds
          );
          return new JwtSecurityTokenHandler().WriteToken(token);
      }
      return null;
      }
  • Hover en Seleccionar acciones y haga clic en Copiar enlace SSO.
Copiar enlace SSO de ASP.NET Core

  • Utilice la siguiente URL como enlace en la aplicación desde donde desea realizar el SSO:
  • https://<application-url>?ssoaction=login&appid=<app-id>
  • Después de iniciar sesión, será redirigido nuevamente a su aplicación frontend, Entonces se le pedirá que haga una llamada a la API para obtener el token e información del usuario.
  • A continuación se muestra el código de muestra que puede utilizar para realizar la llamada a la API. punto final del token para obtener el token desde el lado del frontend.
  • fetch("https://<backend-api-baseurl>/api/gettoken", {
      method: "GET",
    })
    .then((response) => {
      //here you will receive the jwt token and the user details
      console.log(response);
    });
  • Inicie su aplicación ASP.NET Core Web API
  • Inicie su aplicación frontend
  • Desde la aplicación frontend, haga clic en el icono Inicio de sesión SSO botón que has añadido
  • Después Inicio de sesión SAML, Serás redirigido de nuevo a tu aplicación frontend. En este punto, tu aplicación frontend llama al /api/gettoken punto final, que devuelve el token y los detalles del usuario. Puede usar el ficha JWT para realizar futuras llamadas a la API.
Ficha JWT

Nota: Si está utilizando el atributo Autorizar en la API para la validación de token, se le solicitará que especifique la política de autenticación ya que ahora tenemos varias políticas registradas.

Para uso de JWT: [Autorizar(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]


Póngase en contacto con nosotros en aspnetsupport@xecurify.com y nuestro equipo le ayudará a configurar el inicio de sesión único (SSO) SAML de ASP.NET Core. Le ayudaremos a seleccionar la solución o el plan más adecuado según sus necesidades.

ADFS_sso ×
¡Hola!

¿Necesitas ayuda? ¡Estamos aquí!

múltiples proveedores