Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Koexistenzlösung für ASP.NET- und ASP.NET Core-Benutzerauthentifizierungscookies

Ausführliche Erläuterung der Koexistenzlösung für ASP.NET- und ASP.NET Core-Benutzerauthentifizierungscookies

高洛峰
高洛峰Original
2017-02-20 17:13:031481Durchsuche

Dieser Artikel stellt hauptsächlich die detaillierte Lösung für die Koexistenz von ASP.NET- und ASP.NET Core-Benutzerüberprüfungscookies vor. Er hat einen gewissen Referenzwert und interessierte Freunde können darauf verweisen.

Wenn Sie Ihre vorhandene Benutzeranmeldeseite (Anmelden) von ASP.NET zu ASP.NET Core migrieren, werden Sie mit einem solchen Problem konfrontiert: So verbinden Sie ASP.NET- und ASP.NET Core-Benutzer. Überprüfen Sie, ob Cookies vorhanden sind koexistieren und ASP.NET-Anwendungen und ASP.NET Core-Anwendungen ihre eigenen Cookies verwenden lassen? Da ASP.NET FormsAuthentication verwendet, verwendet ASP.NET Core eine anspruchsbasierte Authentifizierung und ihre Verschlüsselungsalgorithmen sind unterschiedlich.

Die von uns gewählte Lösung besteht darin, nach erfolgreicher Anmeldung in ASP.NET Core jeweils zwei Cookies zu generieren und diese gleichzeitig an den Client zu senden.

Das Generieren des anspruchsbasierten Authentifizierungsüberprüfungscookies von ASP.NET Core ist relativ einfach. Der Beispielcode lautet wie folgt:

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

Generieren Das FormsAuthentication-basierte Authentifizierungscookie von ASP .NET ist etwas problematischer.

Erstellen Sie zunächst eine Web-API-Site mit ASP.NET und generieren Sie Cookies basierend auf FormsAuthentication. Der Beispielcode lautet wie folgt:

public IHttpActionResult GetAuthCookie(string loginName, bool isPersistent)
{
  var cookie = FormsAuthentication.GetAuthCookie(loginName, isPersistent);
  return Json(new { cookie.Name, cookie.Value, cookie.Expires });
}

Dann schreiben Sie einen Web-API-Client auf der ASP.NET Core-Anmeldeseite, um Cookies zu erhalten. Der Beispielcode lautet wie folgt:

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>();
  }
}

Abschließend: Auf der ASP.NET Core-Anmeldeseite sendet der Verarbeitungscode nach erfolgreicher Anmeldung gezielt das ASP.NET FormsAuthentication-Cookie an den Client. Der Beispielcode lautet wie folgt:

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

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass es für das Lernen aller hilfreich ist, und ich hoffe auch, dass jeder die chinesische PHP-Website unterstützt.

Ausführlichere Erläuterungen zu den Koexistenzlösungen für ASP.NET- und ASP.NET Core-Benutzerauthentifizierungscookies finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn