5 votes

En essayant de décrypter un ticket FormsAuthentication, impossible de valider les données

Je suis en train d'utiliser la nouvelle Web API.

Maintenant je ne sais pas si je fais cela correctement mais j'essaie de configurer mon API pour renvoyer un cookie d'authentification dans l'en-tête de HttpResponseMessages à utiliser dans une autre application MVC.

Je suis en train d'utiliser FormsAuthenticationTicket car je pense que c'est ce que je dois utiliser comme

  public HttpResponseMessage Get(LoginModel model)
    {
        if (model.UserName == "bob")
        {
            //  if (Membership.ValidateUser(model.UserName, model.Password))
            // {
            var msg = new HttpResponseMessage(HttpStatusCode.OK);
            var expires = DateTime.Now.AddMinutes(30);
            var auth = new FormsAuthenticationTicket(1, model.UserName, DateTime.Now, expires,
                                                     model.RememberMe,"password",
                                                     FormsAuthentication.FormsCookiePath);
            var cookie = new HttpCookie("user");
            cookie.Value = FormsAuthentication.Encrypt(auth);
            cookie.Domain = "localhost";
            cookie.Expires = expires;
            msg.Headers.Add("result",cookie.Value);
            return msg;
            //   }
        }
        return new HttpResponseMessage(HttpStatusCode.Forbidden);
        //else
        //{
        //    return "The user name or password provided is incorrect.";
        //}
    }

maintenant dans mon contrôleur de connexion de mon application MVC, j'appelle le service et je récupère la valeur des données de l'en-tête que j'ai définie dans le contrôleur API.

   string data = response.Headers["result"].ToString();
   FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(data);

Chaque fois que j'essaie d'exécuter FormsAuthentication.Decrypt, je reçois une erreur

Impossible de valider les données.

Je suppose que c'est parce que lorsque l'API chiffre les données, elle utilise une sorte de clé que le site web ne connaît pas. Ai-je raison ?

Est-ce que quelqu'un peut aider ?

Merci

9voto

Darin Dimitrov Points 528142

Je suppose que c'est dû au fait que lorsque l'api chiffre les données, elle utilise une sorte de clé que le site web ne connaît pas. Est-ce que j'ai raison ?

Les méthodes FormsAuthentication.Encrypt et Decrypt utilisent la clé de machine. Assurez-vous d'avoir configuré la même clé pour votre application web Web API et l'application ASP.NET MVC consommant.

Vous pouvez également consulter l' article suivant qui illustre comment vous pourriez utiliser OAuth 2.0 avec le Web API.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X