Maison  >  Article  >  développement back-end  >  Explication détaillée de la solution de coexistence pour les cookies d'authentification des utilisateurs ASP.NET et ASP.NET Core

Explication détaillée de la solution de coexistence pour les cookies d'authentification des utilisateurs ASP.NET et ASP.NET Core

高洛峰
高洛峰original
2017-02-20 17:13:031466parcourir

Cet article présente principalement la solution détaillée pour la coexistence des cookies de vérification des utilisateurs ASP.NET et ASP.NET Core. Il a une certaine valeur de référence et les amis intéressés peuvent s'y référer.

Lorsque vous migrez votre site de connexion utilisateur (Connexion) existant d'ASP.NET vers ASP.NET Core, vous serez confronté au problème suivant : comment connecter les utilisateurs d'ASP.NET et d'ASP.NET Core. Vérifiez que les cookies coexister et laisser les applications ASP.NET et ASP.NET Core utiliser leurs propres cookies ? Étant donné qu'ASP.NET utilise FormsAuthentication, ASP.NET Core utilise l'authentification basée sur les revendications et leurs algorithmes de chiffrement sont différents.

La solution que nous avons adoptée est de générer respectivement 2 cookies après une connexion réussie dans ASP.NET Core et de les envoyer au client en même temps.

La génération du cookie de vérification d'authentification basée sur les revendications d'ASP.NET Core est relativement simple. L'exemple de code est le suivant :

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

Génération. Le cookie d'authentification basé sur FormsAuthentication d'ASP .NET est un peu plus gênant.

Créez d'abord un site API Web avec ASP.NET et générez des cookies basés sur FormsAuthentication. L'exemple de code est le suivant :

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

Puis dans Ecrire un client API Web dans le site de connexion ASP.NET Core pour obtenir les cookies. L'exemple de code est le suivant :

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

Enfin, dans le site de connexion ASP.NET Core Le code de traitement après une connexion réussie envoie spécifiquement le cookie ASP.NET FormsAuthentication au client. L'exemple de code est le suivant :

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

Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun, et j'espère également que tout le monde soutiendra le site Web PHP chinois.

Pour des explications plus détaillées sur les solutions de coexistence des cookies d'authentification utilisateur ASP.NET et ASP.NET Core, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn