質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
.NET Core

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

ASP.NET

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

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

0回答

2360閲覧

ASP.NET MVCとASP.NET Core間の認証の共有について

masterofpuppets

総合スコア12

.NET Core

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

ASP.NET

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

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2020/12/17 00:54

編集2020/12/17 01:21

以前、こちらの内容で質問させていただきご回答を頂戴いたしました。
https://teratail.com/questions/306307
サイトA(ASP.NET MVC 5)からサイトB(ASP.NET MVC 5)やサイトC(ASP.NET CORE 5)を呼び出す際、
サイトAでのサインイン情報をBまたはCにも引き継ぐ事をしたいのが目的です。
今回の対応(ロジック変更)としまして、ご回答いただいた以下を参考にいたしました。
https://docs.microsoft.com/ja-jp/aspnet/core/security/cookie-sharing?view=aspnetcore-5.0#share-authentication-no-loccookies-between-aspnet-4x-and-aspnet-core-apps

以下、改修内容を以下の書かせていただきますが、
この仕様はログインページの「Remember Me」にチェックを付ける事が前提という認識でよろしかったでしょうか。
今回、ログインページの「Remember Me」チェックボックスは非表示化し、
(ASP.NET MVC側の)AccountControllerのLoginアクションのPasswordSignInAsyncも、以下のように強制的にRemember Meをtrueにしております。

SignInStatus result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);

SignInStatus result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, true, shouldLockout: false);

私の認識が間違っている場合、お手数ですがご指摘の程お願い申し上げます。

【ASP.NET MVC側】
IdentityModels.cs

public class ApplicationUser : IdentityUser { public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) { var userIdentity = await manager.CreateIdentityAsync(this, "Identity.Application"); return userIdentity; } }

Startup.Auth.cs

app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = "Identity.Application", CookieName = ".Hoge.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(@"c:\temp\"), (builder) => { builder.SetApplicationName("SharedCookieApp"); }) .CreateProtector( "Microsoft.AspNetCore.Authentication.Cookies." + "CookieAuthenticationMiddleware", "Identity.Application", "v2"))), CookieManager = new Microsoft.Owin.Security.Interop.ChunkingCookieManager(), SlidingExpiration = true, ExpireTimeSpan = TimeSpan.FromMinutes(43200) }); System.Web.Helpers.AntiForgeryConfig.UniqueClaimTypeIdentifier = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"; app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

【ASP.NET CORE側】
IdentityHostingStartup.cs

services.Configure<SecurityStampValidatorOptions>(options => { options.ValidationInterval = TimeSpan.FromMinutes(30); }); services.AddAuthorization(options => { options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("admin, user")); });

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.Name = ".Hoge.SharedCookie"; options.Cookie.Path = "/"; options.Cookie.HttpOnly = true; options.ExpireTimeSpan = TimeSpan.FromMinutes(43200); options.Cookie.IsEssential = true; options.Cookie.SameSite = SameSiteMode.None; options.LoginPath = "/Identity/Account/Login"; options.AccessDeniedPath = "/Identity/Account/AccessDenied"; options.SlidingExpiration = true; }); services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(@"c:\temp\")) .SetApplicationName("SharedCookieApp"); services.AddControllersWithViews(); }

以上、よろしくお願い申し上げます。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/12/17 01:19

参考にしたサイトは url の文字列を書くだけでなくそこへのリンクを張ってください(microsoft の方の url も teratail の方のようにクリックすれば表示されるようにしてください)。
masterofpuppets

2020/12/17 01:22

大変失礼いたしました。 修正させていただきましたのでよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2020/12/17 01:39 編集

前のスレッド https://teratail.com/questions/306307 の質問のコメント欄で、 認証方式はすべて ASP.NET Identity でそれ以外はない(Windows 認証は使ってない)。すべてのアプリは同一サイト下にあって、Machine Key の設定を同じにすることにより認証チケット/認証クッキーをアプリ間で共有できるようにしている・・・ということですか? と聞いた時、その通りという返事でしたが、ということは上の質問に書いてある、 > サイトA(ASP.NET MVC 5)からサイトB(ASP.NET MVC 5)やサイトC(ASP.NET CORE 5)を呼び出す際、サイトAでのサインイン情報をBまたはCにも引き継ぐ事をしたいのが目的です。 ・・・の、「サイトA」と「サイト B」は既にそうなっているということではないのですか? それともホスト名(http://xxxxx/abc/def の xxxxx)が異なる別サイトですか? 「サイトC」は IIS 上でどう設定されているのですか? 「サイトA」または「サイト B」下のアプリケーションとして設定されているのですか?
masterofpuppets

2020/12/17 01:45

申し訳ございません、ご指摘の通り、サイトA(ASP.NET MVC)とサイトB(ASP.NET MVC)間についてはおっしゃる通り既にそうなっております。 サイトA(ASP.NET MVC)とサイトC(ASP.NET Core)間で…でございます。大変失礼いたしました。 ホスト名は全て同じで、サイトCもアプリケーションプールがA・Bと異なるだけの違いです。 紛らわしい説明、大変失礼いたしました。
退会済みユーザー

退会済みユーザー

2020/12/17 01:52

上記のことを質問欄を編集して追加情報として追記願います。
退会済みユーザー

退会済みユーザー

2020/12/17 03:26

上記のことを質問欄を編集して追加情報として追記願います。コメント欄は「質問への追記・修正の依頼」を行う場で、追加情報を書く場所ではありません。質問のコメント欄は初期画面では閉じていますので読まない人もいますし。やってもらえないなら、自分はここからは撤退します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問