검색 결과 :

×

ASP.NET Core 분리 애플리케이션에서 SAML Single Sign-On(SSO) 구성

이 가이드에서는 SAML 호환 ID 공급자(IdP)를 사용하여 ASP.NET Core 분리 아키텍처 애플리케이션에서 SAML Single Sign-On(SSO)을 설정하는 자세한 단계를 제공합니다. 백엔드(ASP.NET Core)는 SSO 인증을 처리하고, JWT 토큰을 생성하고, 이를 모든 프런트엔드(React, Angular, Vue 등)에 안전하게 노출합니다.

플랫폼 지원: ASP.NET Core SAML 미들웨어는 ASP.NET Core 2.0 이상을 지원합니다. Windows, Linux, macOS를 포함한 모든 ASP.NET Core 플랫폼을 지원합니다.

NuGet 패키지
.NET CLI

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 CLI

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

ID 공급자를 사용하여 ASP.NET Core SAML SSO를 위한 단계별 가이드입니다.


  • 통합 후 브라우저를 열고 아래 URL을 사용하여 커넥터 대시보드를 탐색하세요.
 http(s)<your-dotnet-application-base-url>?ssoaction=config
  • 등록 페이지나 로그인 페이지가 팝업되면 애플리케이션에 miniOrange SAML SSO 미들웨어가 성공적으로 추가된 것입니다.
ASP.NET Core- 등록 페이지

  • 다음을 클릭하여 귀하의 계정으로 등록하거나 로그인하십시오. 회원가입 미들웨어를 구성하는 버튼입니다.
  • 아래의 플러그인 설정 탭에서 표시된 목록에서 ID 공급자를 선택하세요.
miniOrange를 IDP로 사용하는 ASP.NET Core SAML Single Sign-On(SSO) - 새 IDP 추가

아래에는 SAML SP 메타데이터를 가져와 ID 공급자 측에서 구성할 수 있는 두 가지 방법이 자세히 나와 있습니다.

A] SAML 메타데이터 URL 또는 메타데이터 파일 사용

  • . 플러그인 설정 메뉴, 찾다 서비스 제공업체 설정. 그 아래에는 메타데이터 URL과 SAML 메타데이터를 다운로드하는 옵션이 있습니다.
  • 메타데이터 URL을 복사하거나 메타데이터 파일을 다운로드하여 ID 공급자 측에서 동일하게 구성하세요.
  • 아래 스크린샷을 참고하시면 됩니다.
ASP.NET Core- 서비스 공급자 메타데이터

B] 메타데이터 수동 업로드

  • 에서 서비스 제공업체 설정 섹션에서는 서비스 제공자 메타데이터를 수동으로 복사할 수 있습니다. SP 엔티티 ID, ACS URL, 싱글 로그아웃 URL 구성을 위해 ID 공급자와 공유하세요.
  • 아래 스크린샷을 참고하시면 됩니다.
ASP.NET Core- sp 데이터를 수동으로 입력

아래에는 미들웨어에서 SAML ID 공급자 메타데이터를 구성하는 두 가지 방법이 자세히 나와 있습니다.

A] IDP 메타데이터 업로드 버튼을 사용하여 메타데이터를 업로드합니다.

  • 귀하의 ID 공급자가 메타데이터 URL 또는 메타데이터 파일(.xml 형식만 해당)을 제공한 경우 미들웨어에서 다음을 사용하여 간단히 ID 공급자 메타데이터를 구성할 수 있습니다. IDP 메타데이터 업로드 옵션을 선택합니다.
  • 메타데이터 URL을 복사하거나 메타데이터 파일을 다운로드하여 ID 공급자 측에서 동일하게 구성하세요.
  • 아래 스크린샷을 참고하시면 됩니다.
ASP.NET Core- IDP 메타데이터 업로드

  • 사용 가능한 메타데이터 형식에 따라 옵션 중 하나를 선택할 수 있습니다.

B] ID 공급자 메타데이터를 수동으로 구성합니다.

  • 구성한 후 아이덴티티 공급자, 그것은 당신에게 제공될 것입니다 IDP 엔터티 ID, IDP 싱글 사인온 URL SAML X509 인증서 각각 필드.
  • 찜하기 IDP 세부 정보를 저장합니다.
ASP.NET Core - IDP 수동 구성
  • 온 클릭 테스트 구성 SAML 구성이 올바른지 테스트하려면 버튼을 클릭하세요.
  • 아래 스크린샷은 성공적인 결과를 보여줍니다. 클릭 SSO 통합 SSO 통합을 계속 진행합니다.
ASP.NET Core- 테스트 구성

  • 미들웨어 측에서 오류가 발생하는 경우 아래와 유사한 창이 표시됩니다.
ASP.NET Core- 테스트 구성 오류

  • 오류를 해결하려면 다음 단계를 따르세요.
  • $XNUMX Million 미만 문제 해결 탭에서 토글을 활성화하여 플러그인 로그를 수신하세요.
ASP.NET Core- 문제 해결

  • 활성화되면 플러그인 로그를 검색하여 다음을 수행할 수 있습니다. 플러그인 설정 탭을 클릭하고 테스트 구성.
  • 를 다운로드 로그 파일 인사말 문제 해결 탭을 눌러서 무엇이 잘못되었는지 확인하세요.
  • 당신은 공유할 수 있습니다 로그 파일 우리와 함께 aspnetsupport@xecurify.com 문제를 해결하기 위해 저희 팀에서 연락을 드릴 것입니다.

  • 구성을 테스트한 후 애플리케이션 속성을 ID 공급자(IdP) 속성과 매핑합니다.
  • 참고 : 모든 매핑된 속성은 세션에 저장되므로 애플리케이션에서 액세스할 수 있습니다.
ASP.NET Core- 특성 매핑


  • 이 단계를 통해 애플리케이션에서 사용자 클레임 형식으로 SSO 사용자 정보를 검색할 수 있습니다.
  • 참고 : 이 평가판 미들웨어는 클레임의 사용자 정보만 지원하며, 세션 및 헤더의 사용자 정보 검색은 프리미엄 플러그인에서 가능합니다.
  • 로그인 후 JWT 토큰을 반환하기 위해 .NET 측에서 GET Endpoint를 만듭니다.
    참고: JWT를 생성하는 방법이 있는 경우 .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 링크 복사

  • SSO를 수행하려는 애플리케이션에서 다음 URL을 링크로 사용하세요.
  • 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 토큰

참고: 토큰 검증을 위해 API에서 Authorize 속성을 사용하는 경우 여러 정책이 등록되었으므로 인증 정책을 지정해야 합니다.

JWT 사용 시: [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]


ASP.NET Core SAML SSO 설정과 관련하여 궁금한 점이 있으시면 aspnetsupport@xecurify.com 으로 문의해 주세요 . 저희 팀에서 고객님의 요구사항에 가장 적합한 솔루션/플랜을 선택하실 수 있도록 도와드리겠습니다.

ADFS_sso ×
안녕하세요!

도움이 필요하다? 우리는 바로 여기에 있습니다!

SUPPORT