J'ai une application Web .NET Core 2 et je veux utiliser l'identité ASP.NET pour authentifier mes utilisateurs. Sur .NET Core 1.x, mon code fonctionnait bien.
J'ai migré vers .NET Core 2 et l'authentification fonctionne lors de l'exécution locale dans Visual Studio. Mais lorsque je déploie dans un environnement en direct, l'authentification cesse de fonctionner: le cookie d'authentification n'est pas défini en production.
Mon code Startup.cs ressemble à ceci:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<AppUser, RavenDB.IdentityRole>()
.AddDefaultTokenProviders();
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseAuthentication();
}
Pour vous connecter, mon code ressemble à ceci:
public async Task<ActionResult> SignIn(...)
{
var user = ...; // Load the User from the database.
await this.signInManager.SignInAsync(user, isPersistent: true);
...
}
Ce code fonctionne localement: le cookie d'authentification d'identité ASP.NET est défini. Toutefois, lorsque je déploie cette fonctionnalité dans l'environnement de production dans Azure, le cookie n'est jamais défini.
Qu'est-ce que je rate?
J'ai résolu le problème. Cela se résumait à HTTPS: il semble que signInManager.SignInAsync (...) définisse un cookie exclusivement HTTPS. Je publiais initialement sur un site non HTTPS à des fins de test.
Une fois que j'ai publié sur un site HTTPS, le cookie a recommencé à fonctionner.
La raison pour laquelle cela fonctionnait localement était que je courais en HTTPS localement.
Avait le même problème avec Chrome 60+. Cookie n'a pas voulu définir sur le site HTTP ou même HTTPS et Cordova.options.Cookie.SameSite = SameSiteMode.None;
https://github.com/aspnet/Docs/blob/master/aspnetcore/security/authentication/cookie.md
Le passage de la valeur par défaut (Lax) à Aucune l'a corrigé pour moi.