ホームページ >バックエンド開発 >C#.Net チュートリアル >ASP.NET と ASP.NET Core のユーザー認証 Cookie の共存ソリューションの詳細な説明
この記事では、ASP.NET と ASP.NET Core のユーザー認証 Cookie を共存させるための詳細なソリューションを主に紹介します。これには一定の参考値があり、興味のある友人はそれを参照できます。
既存のユーザー ログイン (サインイン) サイトを ASP.NET から ASP.NET Core に移行する場合、ASP.NET と ASP.NET Core のユーザー認証 Cookie を共存させる方法という問題に直面します。アプリケーションと ASP.NET Core アプリケーションは独自の Cookie を使用しますか? ASP.NET は FormsAuthentication を使用するため、ASP.NET Core はクレームベース認証を使用し、暗号化アルゴリズムが異なります。
私たちが採用した解決策は、ASP.NET Core でのログイン成功後に 2 つの Cookie をそれぞれ生成し、同時にクライアントに送信することです。
ASP.NET Core のクレームベース認証の認証 Cookie の生成は比較的簡単です。サンプル コードは次のとおりです。
var claimsIdentity = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, loginName) }, "Basic"); var claimsPrincipal = new ClaimsPrincipal(claimsIdentity); await context.Authentication.SignInAsync(_cookieAuthOptions.AuthenticationScheme, claimsPrincipal, new AuthenticationProperties { IsPersistent = isPersistent, ExpiresUtc = DateTimeOffset.Now.Add(_cookieAuthOptions.ExpireTimeSpan) });
ASP.NET の FormsAuthentication ベースの認証 Cookie の生成は少し面倒です。
まず、ASP.NET で Web API サイトを作成し、FormsAuthentication に基づいて Cookie を生成します。サンプル コードは次のとおりです。
public IHttpActionResult GetAuthCookie(string loginName, bool isPersistent) { var cookie = FormsAuthentication.GetAuthCookie(loginName, isPersistent); return Json(new { cookie.Name, cookie.Value, cookie.Expires }); }
次に、ASP.NET Core ログイン サイトに Web API クライアントを記述して Cookie を取得します。 、サンプルコードは以下の通り:
public class UserServiceAgent { private static readonly HttpClient _httpClient = new HttpClient(); public static async Task<Cookie> GetAuthCookie(string loginName, bool isPersistent) { var response = await _httpClient.GetAsync(url); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsAsync<Cookie>(); } }
最後に、ASP.NET Core ログインサイトのログイン成功後の処理コードでは、具体的には ASP.NET FormsAuthentication Cookie をクライアントに送信します。 :
var cookie = await _userServiceAgent.GetAuthCookie(loginName, isPersistent); var options = new CookieOptions() { Domain = _cookieAuthOptions.CookieDomain, HttpOnly = true }; if (cookie.Expires > DateTime.Now) { options.Expires = cookie.Expires; } context.Response.Cookies.Append(cookie.Name, cookie.Value, options);
以上です。この記事の内容全体が皆さんの学習に役立つことを願っています。また、皆さんが PHP 中国語 Web サイトをサポートしてくれることを願っています。
ASP.NET と ASP.NET Core のユーザー認証 Cookie 共存ソリューションの詳細については、PHP 中国語 Web サイトの関連記事に注目してください。