Question

J'utilise Windows Identity Foundation (WIF) Security Token Service (STS) pour l'authentification de poignée pour mon application qui fonctionne très bien. Cependant, je ne peux pas sembler obtenir une connexion en cours d'exécution longue avec les STS.

De ma compréhension, je ne devrais pas se soucier des jetons du client au niveau de l'application, car ils peuvent expirer tout ce qu'ils veulent et il devrait me rediriger vers les STS et aussi longtemps qu'ils sont toujours enregistrés dans les STS il se doit rafraîchir leur jeton d'application. Pourtant, il ne semble pas vouloir les garder connecté.

Voici ce qui se passe dans mon login.aspx sur les STS

var cookie = FormsAuthentication.GetAuthCookie(userName, persistTicket);

if (persistTicket)
    cookie.Expires = DateTime.Now.AddDays(14);

Response.Cookies.Add(cookie);

var returnUrl = Request.QueryString["ReturnUrl"];
Response.Redirect(returnUrl ?? "default.aspx");

Ce qui a été pris presque directement de l'application existante en utilisant les formes normales Auth.

De mon web.config

<authentication mode="Forms">
      <forms loginUrl="Login.aspx" protection="All" timeout="2880" 
      name=".STS" path="/" requireSSL="false" slidingExpiration="true" 
      defaultUrl="default.aspx" cookieless="UseDeviceProfile" 
      enableCrossAppRedirects="false" />
</authentication>

En regardant le cookie après que je signe dans je peux voir la expires temps sur le cookie est fixé pour 14 jours à l'avenir et que le cookie est PAS un cookie de session.

Quand je suis obligé de vous reconnecter au STS je peux voir que mon biscuit d'origine est toujours là.

Y at-il une sorte de fonctionnalité horodatage que les STS dans le cookie Intègre qui est INFIRMER mon biscuit, même si pour autant que je sache, il devrait encore être valable?

Était-ce utile?

La solution

Après avoir lu la suggestion de @uosel ce fil me sur le chemin de faire une analyse plus approfondie sur ce qui se passe ici exactement. Alors que mon but est de créer un cookie persistant uniquement pour les STS même et non pas pour les STS qui consomment des sites. De cette façon, je peux toujours valider l'utilisateur au niveau STS à toute expiration d'un STS consommant site.

Avec plus de locomotion dans ce train de la pensée sur moi est apparu que le site de STS utilise les formes auth pour sécuriser l'autorisation de WIF réelle qui se produit dans le index.aspx. Que la question est que j'avais aucune logique qui utiliserait le ticket d'un des formulaires existants pour traiter le transfert à la page d'index sécurisé des formulaires.

Cela a conduit à moi une solution similaire à

if(User.Identity.IsAuthenticated)
{    
    if(IsValidUserCredentials())
    {
       var returnUrl = Request.QueryString["ReturnUrl"];
       Response.Redirect(returnUrl ?? "default.aspx");
    }    
}
else
{
    DisplayLoginForm()
}
scroll top