Результаты поиска :

×

Настройка единого входа SAML (SSO) в децентрализованном приложении ASP.NET Core

В этом руководстве подробно описаны шаги по настройке единого входа SAML (SSO) в приложении ASP.NET Core с децентрализованной архитектурой, использующем любой поставщик идентификации (IdP), совместимый с SAML. Бэкенд (ASP.NET Core) обрабатывает аутентификацию SSO, генерирует JWT-токен и безопасно предоставляет его любому фронтенду (React, Angular, Vue и т. д.).

Поддержка платформ: Промежуточное ПО ASP.NET Core SAML поддерживает ASP.NET Core 2.0 и выше. Оно поддерживает все платформы ASP.NET Core, включая Windows, Linux и macOS.

Пакет NuGet
.NET интерфейс командной строки

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


Примечание: Для интеграции промежуточного ПО miniOrange ASP.NET SAML SSO в ваше приложение вам потребуется добавить в проект следующие пространства имен, сервисы и промежуточное ПО. Ниже приведен пример реализации для справки.

  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();
Пакет NuGet
.NET интерфейс командной строки

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


Примечание: Для интеграции промежуточного ПО miniOrange ASP.NET SAML SSO в ваше приложение вам потребуется добавить в проект следующие пространства имен, сервисы и промежуточное ПО. Ниже приведен пример.

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

Если при выполнении вызовов API возникают проблемы с CORS , добавьте указанную ниже службу и политику.

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

Пошаговое руководство по использованию SAML SSO в ASP.NET Core с вашим поставщиком идентификации.


  • После интеграции откройте браузер и перейдите на панель управления коннектором по указанному ниже URL-адресу:
 http(s)<your-dotnet-application-base-url>?ssoaction=config
  • Если появляется страница регистрации или страница входа в систему, значит, вы успешно добавили промежуточное ПО miniOrange SAML SSO в свое приложение.
Страница регистрации ASP.NET Core

  • Зарегистрируйтесь или войдите в свою учетную запись, нажав на кнопку. Зарегистрировать филиал кнопка для настройки промежуточного программного обеспечения.
  • Под Плагин Настройки На вкладке выберите своего поставщика идентификации из показанного списка.
Единый вход (SSO) SAML в ASP.NET Core с использованием miniOrange в качестве поставщика идентификации (IDP) — добавление нового поставщика идентификации.

Ниже описаны два способа получения метаданных SAML SP для настройки на стороне вашего поставщика идентификации.

A] Использование URL-адреса метаданных SAML или файла метаданных

  • В Меню настроек плагина, искать Настройки поставщика услугНиже вы найдете URL-адрес метаданных, а также возможность загрузки метаданных SAML.
  • Скопируйте URL-адрес метаданных или загрузите файл метаданных, чтобы настроить его на стороне вашего поставщика идентификации.
  • Вы можете ознакомиться с приведенным ниже скриншотом:
ASP.NET Core - Метаданные поставщика услуг

B] Загрузка метаданных вручную

  • Из издания Настройки поставщика услуг В этом разделе вы можете вручную скопировать метаданные поставщика услуг, например: Идентификатор сущности SP, URL-адрес ACS, URL-адрес единого выхода. и поделитесь им со своим поставщиком идентификационных данных для настройки.
  • Вы можете ознакомиться с приведенным ниже скриншотом:
ASP.NET Core - ввод данных хранимой процедуры вручную.

Ниже описаны два способа настройки метаданных поставщика идентификации SAML в промежуточном программном обеспечении.

A] Загрузите метаданные, используя кнопку «Загрузить метаданные IDP»:

  • Если ваш поставщик идентификационных данных предоставил вам URL-адрес метаданных или файл метаданных (только в формате .xml), то вы можете просто настроить метаданные поставщика идентификационных данных в промежуточном ПО, используя следующий код: Загрузка метаданных IDP опцию.
  • Скопируйте URL-адрес метаданных или загрузите файл метаданных, чтобы настроить его на стороне вашего поставщика идентификации.
  • Вы можете ознакомиться с приведенным ниже скриншотом:
ASP.NET Core - Загрузка метаданных IDP

  • Вы можете выбрать любой из вариантов в зависимости от доступного вам формата метаданных.

B] Настройте метаданные поставщика идентификации вручную:

  • После настройки вашего Поставщик удостоверений, это предоставит вам Идентификатор сущности IDP, URL-адрес единого входа IDP и Сертификат SAML X509 поля соответственно.
  • Нажмите Сохранено чтобы сохранить данные вашего IDP.
ASP.NET Core — настройка IDP вручную
  • Нажмите на Тестовая конфигурация Нажмите кнопку, чтобы проверить правильность выполненной вами настройки SAML.
  • На скриншоте ниже показан успешный результат. Нажмите на SSO интеграция для дальнейшего продолжения интеграции SSO.
ASP.NET Core — конфигурация тестирования

  • Если на стороне промежуточного программного обеспечения возникнет ошибка, вы увидите окно, похожее на приведенное ниже.
Ошибка конфигурации теста ASP.NET Core

  • Для устранения ошибки выполните следующие действия:
  • Под Устранение неполадок Вкладка, включите переключатель, чтобы получать журналы плагина.
ASP.NET Core - Устранение неполадок

  • После включения вы сможете получать журналы плагина, перейдя по адресу... Плагин Настройки вкладку и нажав на Тестовая конфигурация.
  • Скачать журнальный файл из Устранение неполадок Нажмите вкладку, чтобы посмотреть, что пошло не так.
  • Вы можете поделиться журнальный файл с нами в aspnetsupport@xecurify.com Наша команда свяжется с вами, чтобы решить вашу проблему.

  • После проверки конфигурации сопоставьте атрибуты вашего приложения с атрибутами поставщика идентификации (IdP).
  • Примечание: Все сопоставленные атрибуты будут сохранены в сессии, чтобы вы могли получить к ним доступ в своем приложении.
ASP.NET Core - Сопоставление атрибутов


  • Эти шаги позволяют получить информацию о пользователях SSO в вашем приложении в виде пользовательских утверждений.
  • Примечание: В пробной версии промежуточное ПО поддерживает только информацию о пользователе в утверждениях; получение информации о пользователе в сессии и заголовках доступно в платном плагине.
  • Создайте в .NET-приложении конечную точку GET для возврата JWT-токена после входа в систему.
    Примечание: Если у вас есть способ создать JWT, вам просто нужно выбрать утверждения из cookie-файла .NET.
    Ниже приведён код для вашего означения:
  • [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;
      }
  • Наведите указатель мыши на Выберите действия и нажмите на Скопировать ссылку SSO.
ASP.NET Core Копия SSO Link

  • Используйте следующий URL-адрес в качестве ссылки в приложении, из которого вы хотите выполнить единый вход (SSO):
  • https://<application-url>?ssoaction=login&appid=<app-id>
  • После входа в систему вы будете перенаправлены обратно на свой сайт. фронтенд-приложение тогда вам потребуется сделать вызов API , чтобы получить знак и информация о пользователе.
  • Ниже приведён пример кода, который можно использовать для выполнения вызова API. конечная точка токена чтобы получить токен на стороне фронтенда.
  • 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);
    });
  • Запустите свое приложение ASP.NET Core Web API
  • Запустите свое фронтенд-приложение
  • В интерфейсе приложения нажмите на SSO Войти добавленная вами кнопка
  • После Вход по SAML, Вы будете перенаправлены обратно в ваше фронтенд-приложение. На этом этапе ваше фронтенд-приложение вызывает /api/gettoken Конечная точка, которая возвращает токен и данные пользователя. Вы можете использовать JWT-токен для выполнения дальнейших вызовов API.
JWT-токен

Примечание: Если вы используете атрибут Authorize в API для проверки токенов, вам потребуется указать политику аутентификации, поскольку у нас теперь зарегистрировано несколько политик.

Для использования JWT: [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]


Пожалуйста, свяжитесь с нами по адресу aspnetsupport@xecurify.com , и наша команда поможет вам настроить ASP.NET Core SAML SSO. Мы поможем вам выбрать наиболее подходящее решение/план в соответствии с вашими потребностями.

ADFS_sso ×
Привет!

Нужна помощь? Мы здесь!

поддержка