J'ai un problème étrange avec l'aide d'Owin cookie d'authentification.
Lorsque je démarre mon serveur IIS authentification fonctionne parfaitement bien sur IE/Firefox et Chrome.
J'ai commencé à faire quelques essais avec d'Authentification et de connexion sur différentes plates-formes et je suis venu avec une étrange erreur. Sporadiquement, Owin cadre / IIS juste ne pas envoyer des cookies dans les navigateurs. Je vous tapez un nom d'utilisateur et un mot de passe est correct, le code fonctionne, mais aucun témoin n'est livré dans le navigateur. Si je redémarre le serveur, il commence à travailler à un certain moment, je vais essayer de connexion et de nouveau les cookies cesser de se livrer. En passant sur le code ne fait rien et ne renvoie pas d'erreur.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
CookieHttpOnly = true,
AuthenticationType = "ABC",
LoginPath = new PathString("/Account/Login"),
CookiePath = "/",
CookieName = "ABC",
Provider = new CookieAuthenticationProvider
{
OnApplyRedirect = ctx =>
{
if (!IsAjaxRequest(ctx.Request))
{
ctx.Response.Redirect(ctx.RedirectUri);
}
}
}
});
Et dans ma procédure de connexion, j'ai le code suivant:
IAuthenticationManager authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var authentication = HttpContext.Current.GetOwinContext().Authentication;
var identity = new ClaimsIdentity("ABC");
identity.AddClaim(new Claim(ClaimTypes.Name, user.Username));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.User_ID.ToString()));
identity.AddClaim(new Claim(ClaimTypes.Role, role.myRole.ToString()));
authentication.AuthenticationResponseGrant = new AuthenticationResponseGrant(identity, new AuthenticationProperties()
{
IsPersistent = isPersistent
});
authenticationManager.SignIn(new AuthenticationProperties() {IsPersistent = isPersistent}, identity)
;
Mise à jour 1: Il semble que l'une des causes du problème, c'est quand j'ai ajouter des éléments à la session de la que les problèmes commencent. L'ajout de quelque chose de simple comme la Session.Contenu["ABC"]= 123 semble créer le problème.
Ce que je peux faire est la suivante: 1) (Chrome)Quand je me connecte je obtenir de l'ASP.NET_SessionId + mon cookie d'authentification. 2) je vais à une page qui définit une session.table des matières... 3) Ouvrir une nouvelle fenêtre de navigateur (Firefox) et essayez de vous connecter et qu'il ne reçoit pas un ASP.NET_SessionId ni obtenir un Cookie d'Authentification 4) Alors que le premier navigateur a l'ASP.NET_SessionId il continue à travailler. De la minute où je supprimer ce cookie, il a le même problème que tous les autres navigateurs Je suis en train de travailler sur l'adresse ip (10.x.x.x) et localhost.
Mise à jour 2: Forcer la création de ASPNET_SessionId premier sur mon login_load page avant de l'authentification avec OWIN.
1) avant de m'authentifier avec OWIN je fais une Session aléatoire.Valeur du contenu sur ma page de connexion pour démarrer l'ASP.NET_SessionId 2) ensuite, je authentifier et à faire d'autres séances 3) les Autres navigateurs semblent maintenant travailler
Ce qui est bizarre. Je ne peux que conclure que cela a quelque chose à voir avec l'ASP et OWIN à penser qu'ils sont dans des domaines différents ou quelque chose comme ça.
Mise à jour 3 - comportement Étrange entre les deux.
Supplémentaires étrange comportement déterminé d'expiration de Owin et de la session de l'AEP est différent. Ce que je vois, c'est que mon Owin sessions de rester en vie plus longtemps que mes sessions de l'AEP à travers un mécanisme. Donc, lors de la connexion: 1.) J'ai un cookied en fonction d'authentification de session 2.) J'ai mis un peu de variables de session
Mes variables de session(2) "mourir" avant le owin cookie variable de session forces de re-connexion, ce qui provoque le comportement inattendu pendant toute mon application. (La personne est connecté, mais n'est pas vraiment connecté)
Mise à jour 3B -
Après quelques recherches, j'ai vu quelques commentaires sur une page qui disent que les "formes" d'authentification délai d'attente et le délai d'expiration de session doivent correspondre. Je pense normalement les deux sont en phase, mais pour quelque raison, les deux ne sont pas synchronisés.
Résumé des Solutions de contournement
1) Toujours créer une Session avant l'authentification. Fondamentalement, créer une session lorsque vous commencez la Session de l'application["solution de Contournement"] = 0;
2) [Expérimental] si vous persistez cookies assurez-vous que votre OWIN timeout / durée est plus longue que votre sessionTimeout dans votre site web.config (en test)