Procurar Resultados :

×

Registrar Contato

Configurar SAML Single Sign-On (SSO) em aplicativo desacoplado ASP.NET Core

Este guia fornece etapas detalhadas para configurar o SAML Single Sign-On (SSO) em um aplicativo de arquitetura desacoplada do ASP.NET Core usando qualquer Provedor de Identidade (IdP) compatível com SAML. O backend (ASP.NET Core) lida com a autenticação SSO, gera um token JWT e o expõe com segurança a qualquer frontend (React, Angular, Vue, etc.).

Suporte a plataformas: O middleware SAML do ASP.NET Core é compatível com o ASP.NET Core 2.0 e versões superiores. Ele suporta todas as plataformas ASP.NET Core, incluindo Windows, Linux e macOS.

Pacote NuGet
CLI .NET

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


Observação: Para integrar o middleware miniOrange ASP.NET SAML SSO em sua aplicação, você precisará adicionar os namespaces, serviços e middlewares abaixo ao seu projeto. Segue abaixo um exemplo de implementação para referência.

  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();
Pacote NuGet
CLI .NET

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


Observação: Para integrar o middleware miniOrange ASP.NET SAML SSO em sua aplicação, você precisará adicionar os namespaces, serviços e middlewares abaixo ao seu projeto. Veja um exemplo a seguir.

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

Se você encontrar problemas de CORS ao fazer chamadas de API, adicione o serviço e a política abaixo.

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>");

Guia passo a passo para SSO SAML do ASP.NET Core usando seu provedor de identidade.


  • Após a integração, abra seu navegador e navegue até o painel do conector com o URL abaixo:
 http(s)<your-dotnet-application-base-url>?ssoaction=config
  • Se a página de registro ou de login aparecer, você adicionou com sucesso o middleware miniOrange SAML SSO ao seu aplicativo.
ASP.NET Core - página de registro

  • Registre-se ou faça login com sua conta clicando em Registrar-se botão para configurar o middleware.
  • Sob o Configurações de Plugin guia, selecione seu provedor de identidade na lista exibida.
ASP.NET Core SAML Single Sign-On (SSO) usando miniOrange como IDP - Adicionar novo IDP

Há duas maneiras detalhadas abaixo com as quais você pode obter os metadados do SAML SP para configurar no seu Provedor de Identidade.

A] Usando URL de metadados SAML ou arquivo de metadados

  • De acordo com o relatório Menu de configurações do plugin, olhe para Configurações do provedor de serviços. Abaixo, você pode encontrar o URL dos metadados, bem como a opção para baixar os metadados SAML.
  • Copie o URL dos metadados ou baixe o arquivo de metadados para configurá-lo no seu provedor de identidade.
  • Você pode consultar a captura de tela abaixo:
ASP.NET Core - Metadados do Provedor de Serviços

B] Carregando metadados manualmente

  • De Configurações do provedor de serviços seção, você pode copiar manualmente os metadados do provedor de serviços como ID da entidade SP, URL do ACS, URL de logout único e compartilhe-o com seu provedor de identidade para configuração.
  • Você pode consultar a captura de tela abaixo:
ASP.NET Core - inserir dados sp manualmente

Há duas maneiras detalhadas abaixo com as quais você pode configurar os metadados do seu Provedor de Identidade SAML no middleware.

A] Carregar metadados usando o botão Carregar metadados do IDP:

  • Se o seu provedor de identidade tiver fornecido a URL de metadados ou o arquivo de metadados (somente formato .xml), você poderá simplesmente configurar os metadados do provedor de identidade no middleware usando o Carregar metadados do IDP opção.
  • Copie o URL dos metadados ou baixe o arquivo de metadados para configurá-lo no seu provedor de identidade.
  • Você pode consultar a captura de tela abaixo:
ASP.NET Core - Carregar metadados do IDP

  • Você pode escolher qualquer uma das opções de acordo com o formato de metadados disponível.

B] Configure os metadados do provedor de identidade manualmente:

  • Depois de configurar seu Provedor de Identidade, ele irá fornecer a você ID da entidade IDP, URL de logon único do IDP e Certificado SAML X509 campos respectivamente.
  • Clique Economize para salvar seus dados de IDP.
ASP.NET Core - Configurar IDP manualmente
  • Clique no Configuração de Teste botão para testar se a configuração SAML que você fez está correta.
  • A captura de tela abaixo mostra um resultado bem-sucedido. Clique em Integração SSO para continuar com a integração do SSO.
ASP.NET Core - Configuração de Teste

  • Se você estiver enfrentando algum erro no middleware, será exibida uma janela semelhante à abaixo.
ASP.NET Core - Erro de configuração de teste

  • Para solucionar o erro, siga os passos abaixo:
  • Debaixo Resolução de problemas guia, ative a alternância para receber os logs do plugin.
ASP.NET Core - Solução de problemas

  • Uma vez habilitado, você poderá recuperar os logs do plugin navegando até Configurações de Plugin guia e clicando em Configuração de Teste.
  • Faça o download do arquivo de log do Resolução de problemas aba para ver o que deu errado.
  • Você pode compartilhar o arquivo de log conosco em aspnetsupport@xecurify.com e nossa equipe entrará em contato com você para resolver seu problema.

  • Depois de testar a configuração, mapeie os atributos do seu aplicativo com os atributos do Provedor de Identidade (IdP).
  • Observação: Todos os atributos mapeados serão armazenados na sessão para que você possa acessá-los em seu aplicativo.
ASP.NET Core - Mapeamento de Atributos


  • Estas etapas permitem que você recupere as informações do usuário SSO em seu aplicativo na forma de declarações de usuário.
  • Observação: Este middleware de teste suporta apenas informações do usuário em reivindicações, recuperando informações do usuário na sessão e cabeçalhos está disponível no plugin premium
  • Crie um endpoint GET no lado .NET para retornar o token JWT após o login.
    Observação: se você tiver um método para criar um JWT, basta selecionar as declarações do cookie .NET.
    Abaixo está o código para sua referência:
  • [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;
      }
  • Passe o mouse sobre Selecionar ações e clique em Copiar link SSO.
ASP.NET Core Copiar Link SSO

  • Use o seguinte URL como um link no aplicativo de onde você deseja executar o SSO:
  • https://<application-url>?ssoaction=login&appid=<app-id>
  • Após o login, você será redirecionado de volta para sua conta aplicação frontend, então você será obrigado a fazer uma chamada de API Para obter o token digital único, e informações do usuário.
  • Abaixo está o código de exemplo que você pode usar para fazer a chamada da API para o ponto final do token para obter o token do lado do 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 seu aplicativo ASP.NET Core Web API
  • Inicie seu aplicativo frontend
  • No aplicativo frontend, clique em Login SSO botão que você adicionou
  • Depois de Login SAML, você será redirecionado de volta para seu aplicativo front-end. Neste ponto, seu aplicativo front-end chama o /api/gettoken endpoint, que retorna o token e os detalhes do usuário. Você pode usar o Token JWT para fazer suas próximas chamadas de API.
Token JWT

Observação: se você estiver usando o atributo Authorize na API para validação de token, será necessário especificar a política de autenticação, pois agora temos várias políticas registradas.

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


Entre em contato conosco pelo endereço aspnetsupport@xecurify.com e nossa equipe o ajudará a configurar o SSO SAML do ASP.NET Core. Nossa equipe o ajudará a selecionar a solução/plano mais adequado às suas necessidades.

ADFS_sso ×
Olá!

Preciso de ajuda? Estamos bem aqui!

ajuda