ホームページ  >  記事  >  バックエンド開発  >  ASP.NET と ASP.NET Core のユーザー認証 Cookie の共存ソリューションの詳細な説明

ASP.NET と ASP.NET Core のユーザー認証 Cookie の共存ソリューションの詳細な説明

高洛峰
高洛峰オリジナル
2017-02-20 17:13:031480ブラウズ

この記事では、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 サイトの関連記事に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。