5

Tôi đang sử dụng webapi mới.Cố gắng giải mã vé FormsAuthentication luôn không thể xác thực dữ liệu

Bây giờ tôi không biết nếu tôi làm điều này một cách chính xác nhưng tôi đang cố gắng thiết lập api của tôi để trả lại cookie xác thực trong tiêu đề HttpResponseMessages để sử dụng trên một ứng dụng mvc khác.

Tôi đang sử dụng FormsAuthenticationTicket như tôi nghĩ nó những gì tôi cần phải sử dụng như

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."; 
     //} 
    } 

tại trong điều khiển đăng nhập của tôi trên ứng dụng MVC của tôi, tôi gọi cho dịch vụ và nhận được giá trị dữ liệu từ tiêu đề tôi đặt trong bộ điều khiển api.

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

Mỗi lần tôi cố gắng chạy FormsAuthentication.Decrypt tôi tiếp tục nhận được một lỗi

Không thể xác nhận dữ liệu.

Tôi giả định rằng khi api mã hóa dữ liệu, nó sử dụng một số loại khóa mà trang web không biết. Tôi có đúng không?

Ai đó có thể giúp bạn không?

Cảm ơn bạn

+0

Giá trị id của 'dữ liệu' trong dòng này' string data = response.Headers ["result"]. ToString(); '? – Aliostad

Trả lời

8

tôi giả do của nó để khi api mã hóa dữ liệu mà nó sử dụng một số loại khóa mà trang web không biết về. Tôi có đúng không?

FormsAuthentication.Phương thức mã hóa và giải mã sử dụng machine key. Vì vậy, hãy chắc chắn rằng bạn đã cấu hình cùng một khóa cho cả ứng dụng web API Web của bạn và ứng dụng ASP.NET MVC tiêu thụ.

Bạn cũng có thể xem following article minh họa cách bạn có thể sử dụng OAuth 2.0 với API Web.

+0

Bất kỳ ý tưởng làm thế nào để ném một lỗi như vậy mà tôi có thể xóa cookie của tôi và chuyển hướng người dùng đến một bộ điều khiển từ ngoại lệ? Cookie của tôi vẫn tồn tại, do đó tôi bị kẹt trong một vòng lặp chuyển hướng. Điều này xảy ra khi tôi cập nhật khóa của mình. Web API trả lại 401 nhưng MVC chuyển hướng đến trang đăng nhập và yêu cầu trang đăng nhập gửi lại cookie một lần nữa để gửi phản hồi trái phép. Bị mắc kẹt trong một vòng luẩn quẩn! – Shouvik

Các vấn đề liên quan