🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

3919閲覧

ASP.NET Coreでのシングルサインオン

masterofpuppets

総合スコア12

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2020/11/25 04:56

現状、ASP.NET MVC5のWebアプリでイントラネットを作成、運用中です。
イントラネットにはIdentityの機能を用いて個別認証でログインし、そこから各業務Webアプリ(同様にASP.NET MVC5にて作成)を開きます。
(認証先はオンプレミスのDB(SQLServer)サーバです(AspNetUsersテーブル))
業務アプリでもイントラネット同様に個別認証の機能を持たせておりますが、イントラネットでログインすれば業務Webアプリではログインページが表示されず利用出来ます。
(シングルサインオンと言うのでしょうか?)

上記と同じ機能をASP.NET Coreでも実装したいのですが、参考になるサイトや手法をご教示いただけますと幸いです。

何卒よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/11/26 02:49

> イントラネットでログインすれば業務Webアプリではログインページが表示されず利用出来ます。 サーバーもクライアントも全て Active Directory ドメイン環境に属していて、統合 Windows 認証を利用したシングルサインオンが有効になっているということですか?
masterofpuppets

2020/11/26 08:48

説明が下手で申し訳ございません。 社内環境ですと、サーバもクライアントは全てADのドメイン参加しております。 ただ、客先常駐社員も見れるようにしております。 シングルサインオンという表現が混乱を招いてしまいました。 お詫び申し上げます。
退会済みユーザー

退会済みユーザー

2020/11/26 09:04

認証方式はすべて ASP.NET Identity でそれ以外はない(Windows 認証は使ってない)。すべてのアプリは同一サイト下にあって、Machine Key の設定を同じにすることにより認証チケット/認証クッキーをアプリ間で共有できるようにしている・・・ということですか?
退会済みユーザー

退会済みユーザー

2020/11/26 12:11

であれば、gentaro さんの回答があなたの質問、 > 参考になるサイトや手法をご教示いただけますと幸いです。 の回答になっているはずですけど。どこの誰がマイナス評価したんでしょうね? とにかく、回答をもらったのだからそれに対するフィードバックを書くのがマナーだと思います。役に立った/立たなかった、役に立たなかったならどこが期待した回答と違うのかぐらいは書きませんか。
guest

回答1

0

ベストアンサー

上記と同じ機能をASP.NET Coreでも実装したいのですが、参考になるサイトや手法をご教示いただけますと幸いです。

何をどこまで調べて質問に至ったのかわかりませんが、公式リファレンスにそのものズバリの情報がありますけど。
機械翻訳がアレなんで原文で読んだ方が良さそうではありますが。

投稿2020/11/25 07:46

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/11/26 12:13

理由も書かず黙ってマイナス評価を付けた卑怯者がいるようですが、回答になっていますし、マイナス評価を打ち消すためにもプラス評価
gentaro

2020/11/26 13:41

お気遣いありがとうございます。 別にポイント減ったところで何のデメリットもないし、むしろ客観的に見たらこのように擁護してくれる人が増えるだけで得でしかないんであんまり気にしてませんが、たまに思い出したように連日マイナス評価してくる粘着君がいるみたいです。 まぁ頑張ってその不毛な作業に無駄な時間を費やせば良いんじゃないですかね。 私の事が気に食わない人が、私のために無駄な時間を費やしてまで、私の評価を上げる協力をしてくれていると思うと滑稽ですが、やってる本人は自分が馬鹿だと気づかない幸せ者なんでしょう。
masterofpuppets

2020/11/27 01:47

ご返事が大変遅くなり申し訳ございません。 ご教示頂きまして誠にありがとうございました。 暫くはイントラネットはASP.NET MVC5のまま運用する事になりそうですので、 『Share authentication cookies between ASP.NET 4.x and ASP.NET Core apps』を参考に、 ASP.NET MVC5側にも改修を入れていく必要があることを認識いたしました。 現状ですが、ASP.NET CoreのWebアプリを単体で開く→ログインページが表示される。 (上記対策済の)ASP.NET MVC5 イントラネットからASP.NET Core Webアプリを呼び出す→ログインページが開かず処理ページが開く。 この度は誠にありがとうございました。
masterofpuppets

2020/11/27 01:57

追記を失礼いたします。 ASP.NET MVC5 Startup.Auth.cs public void ConfigureAuth(IAppBuilder app) { app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); // 追加 app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = "Identity.Application", CookieName = ".AspNet.SharedCookie", LoginPath = new PathString("/Account/Login"), Provider = new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator .OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) }, TicketDataFormat = new AspNetTicketDataFormat( new DataProtectorShim( DataProtectionProvider.Create(new DirectoryInfo(@"f:\auth_cookie\"), (builder) => { builder.SetApplicationName("SharedCookieApp"); }) .CreateProtector( "Microsoft.AspNetCore.Authentication.Cookies." + "CookieAuthenticationMiddleware", "Identity.Application", "v2"))), CookieManager = new Microsoft.Owin.Security.Interop.ChunkingCookieManager() }); System.Web.Helpers.AntiForgeryConfig.UniqueClaimTypeIdentifier = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"; app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); } IdentityModels.cs public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) { var userIdentity = await manager.CreateIdentityAsync(this, "Identity.Application"); return userIdentity; } ASP.NET Core - Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.Configure<IdentityOptions>(options => { options.Password.RequireDigit = false; options.Password.RequireLowercase = false; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequiredLength = 6; options.Password.RequiredUniqueChars = 1; options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); options.Lockout.MaxFailedAccessAttempts = 5; options.Lockout.AllowedForNewUsers = true; options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; options.User.RequireUniqueEmail = false; }); services.ConfigureApplicationCookie(options => { options.Cookie.HttpOnly = true; options.ExpireTimeSpan = TimeSpan.FromMinutes(5); options.LoginPath = "/Identity/Account/Login"; options.AccessDeniedPath = "/Identity/Account/AccessDenied"; options.SlidingExpiration = true; }); services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(@"f:\auth_cookie\")) .SetApplicationName("SharedCookieApp"); services.ConfigureApplicationCookie(options => { options.Cookie.Name = ".AspNet.SharedCookie"; }); services.AddControllersWithViews(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseMigrationsEndPoint(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute().RequireAuthorization(); endpoints.MapRazorPages(); }); } こちらに改修させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問