の検索結果 :

×

登録する お問い合わせ

ASP.NET Core 分離アプリケーションで SAML シングル サインオン (SSO) を構成する

このガイドでは、SAML 準拠の ID プロバイダー (IdP) を使用して、ASP.NET Core 分離アーキテクチャ アプリケーションで SAML シングル サインオン (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


Note: アプリケーションに 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


Note: アプリケーションに 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();
   });
  }
 }

あなたが得るなら CORSの問題 API 呼び出しを行う際に、以下のサービスとポリシーを追加します。

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

アイデンティティ プロバイダーを使用した ASP.NET Core SAML SSO のステップ バイ ステップ ガイド。


  • 統合後、ブラウザを開き、以下の URL でコネクタ ダッシュボードを参照します。
    https://<asp.net-middleware-base-url>/?ssoaction=config
  • 登録ページまたはログイン ページがポップアップ表示されたら、miniOrange ASP.NET ミドルウェア認証 SAML SSO コネクタがアプリケーションに正常に追加されています。
ASP.NET Core 登録ページ

  • をクリックしてアカウントに登録またはログインします。 登録する ボタンをクリックしてミドルウェアを設定します。
  • プラグインの設定 タブで、表示されるリストから ID プロバイダーを選択します。
ASP.NET Core SAML シングル サインオン (SSO) で miniOrange を IDP として使用 - 新しい IDP を追加

以下に、SAML SP メタデータを取得して ID プロバイダー側​​で構成する方法が 2 つあります。

A] SAMLメタデータURLまたはメタデータファイルを使用する

  • プラグイン設定メニュー、 探す サービスプロバイダーの設定。 その下に、メタデータ URL と SAML メタデータをダウンロードするオプションがあります。
  • メタデータ URL をコピーするか、メタデータ ファイルをダウンロードして、ID プロバイダー側​​で同じものを構成します。
  • 以下のスクリーンショットを参照してください。
ASP.NET Core - サービスプロバイダーメタデータ

B] メタデータを手動でアップロードする

  • ノーザンダイバー社の サービスプロバイダーの設定 セクションでは、サービスプロバイダのメタデータを手動でコピーすることができます。 SP エンティティ ID、ACS URL、シングル ログアウト URL そして、それを構成のためにアイデンティティプロバイダーと共有します。
  • 以下のスクリーンショットを参照してください。
ASP.NET Core - spデータを手動で入力する

ミドルウェアで SAML ID プロバイダーのメタデータを構成するには、以下に説明する 2 つの方法があります。

A] [IDP メタデータのアップロード] ボタンを使用してメタデータをアップロードします。

  • アイデンティティプロバイダがメタデータURLまたはメタデータファイル(.xml形式のみ)を提供している場合は、ミドルウェアでアイデンティティプロバイダのメタデータを次のように設定するだけで済みます。 IDPメタデータのアップロード オプションを選択します。
  • メタデータ URL をコピーするか、メタデータ ファイルをダウンロードして、ID プロバイダー側​​で同じものを構成します。
  • 以下のスクリーンショットを参照してください。
ASP.NET Core - IDP メタデータのアップロード

  • 使用可能なメタデータ形式に応じて、オプションのいずれかを選択できます。

B] ID プロバイダーのメタデータを手動で構成します。

  • を構成した後 ID プロバイダー、それはあなたに提供します IDPエンティティID、IDPシングルサインオンURL および SAML X509証明書 それぞれフィールド。
  • クリック Save IDP の詳細を保存します。
ASP.NET Core - IDP を手動で構成する
  • セットアップボタンをクリックすると、セットアップが開始されます テスト構成 実行した SAML 構成が正しいかどうかをテストするためのボタン。
  • 以下のスクリーンショットは、成功した結果を示しています。 クリック SSO統合 SSO 統合をさらに続行します。
ASP.NET Core - テスト構成

  • ミドルウェア側でエラーが発生した場合は、以下のようなウィンドウが表示されます。
ASP.NET Core - テスト構成エラー

  • エラーのトラブルシューティングを行うには、次の手順に従います。
  • 解決します タブで、プラグイン ログを受信するためのトグルを有効にします。
ASP.NET Core - トラブルシューティング

  • 有効にすると、プラグインのログを取得できるようになります。 プラグインの設定 タブをクリックしてクリックします テスト構成.
  • ダウンロード ログファイル 解決します タブをクリックして何が問題なのかを確認します。
  • あなたは共有することができます ログファイル 私たちと一緒に aspnetsupport@xecurify.com 私たちのチームが問題を解決するためにご連絡いたします。

  • 構成をテストした後、アプリケーション属性をアイデンティティ プロバイダー (IdP) 属性にマップします。
  • Note: マップされたすべての属性はセッションに保存されるため、アプリケーションでアクセスできるようになります。
ASP.NET Core - 属性マッピング


  • この手順により、アプリケーション内の SSO ユーザー情報をユーザー クレームの形式で取得できます。
  • Note: このトライアルミドルウェアはクレーム内のユーザー情報のみをサポートし、セッションとヘッダー内のユーザー情報の取得はプレミアムプラグインで利用できます。
  • ログイン後に JWT トークンを返すために、.NET 側で GET エンドポイントを作成します。
    注: JWT を作成する方法がある場合は、.NET Cookie からクレームを選択するだけです。
    以下に参考用のコードを示します。
  • [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;
      }
  • ホバーオン アクションの選択 をクリックします。入力したコードが正しければ、MFAの設定は正常に完了します 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)]


までご連絡ください aspnetsupport@xecurify.comにご連絡いただければ、当社のチームがASP.NET Core SAML SSOの設定をサポートいたします。お客様の要件に最適なソリューション/プランの選定をお手伝いいたします。

ADFS_sso ×
こんにちは!

助けが必要? 私たちはここにいます!

サポート