2012-04-05 32 views
6

Tôi có dịch vụ webhttp wcf sử dụng xác thực biểu mẫu để xác thực người dùng. Điều này hoạt động tốt nếu vé đến trong bộ sưu tập cookie hoặc trong url.Mở rộng xác thực biểu mẫu để sử dụng tiêu đề http tùy chỉnh cho vé

Nhưng bây giờ tôi muốn gửi chuỗi thẻ xác thực biểu mẫu trong tiêu đề http tùy chỉnh và thay đổi mô-đun auth biểu mẫu để kiểm tra tiêu đề đó thay vì cookie.

Tôi nghĩ rằng sẽ dễ dàng để mở rộng các biểu mẫu auth để đạt được điều này, nhưng không thể tìm thấy bất kỳ tài nguyên nào về cách. Bạn có thể chỉ cho mình hướng chính xác được không ?

dưới đây là cách dòng chảy xác thực của tôi sẽ làm việc,

  1. Một khách hàng gọi phương thức xác thực với tên người dùng và pwd
  2. Dịch vụ trả về chuỗi vé mã hóa
  3. Khách hàng gửi chuỗi vé nhận được trong một http tiêu đề với mọi yêu cầu tiếp theo
  4. Kiểm tra dịch vụ cho tiêu đề xác thực và xác thực vé xác thực
+0

Bạn đã thử dịch ngược các mô-đun hình thức xác thực? Bạn sẽ có thể phân lớp nó và ghi đè lên một số phương thức của nó. Hoặc có thể chỉ viết cho bạn hoàn toàn – cecilphillip

+0

Tại sao bạn muốn gửi vé trong tiêu đề tùy chỉnh thay vì tiêu đề Cookie tiêu chuẩn? –

+0

Coz nó trông đẹp hơn trong một kịch bản API. Việc gửi cookie có vẻ không tự nhiên đối với API – Amila

Trả lời

3

Mẫu Mô-đun xác thực không thể mở rộng được, nhưng bạn có thể viết xác thực của riêng mình. Nó rất đơn giản:

xác thực (2): Cuộc gọi


var formsTicket = new FormsAuthenticationTicket(
    1, login, DateTime.Now, DateTime.Now.AddYears(1), persistent, String.Empty); 
var encryptedFormsTicket = FormsAuthentication.Encrypt(formsTicket); 
//return encryptedFormsTicket string to client 

Dịch vụ với vé kèm theo (4):


var ticket = FormsAuthentication.Decrypt(encryptedFormsTicket) 
//extract authentication info from ticket: ticket.Name 
+0

Tôi thực sự đã làm phương pháp này và hoạt động tốt ... – Amila

1

Tôi không chắc chắn đây là cách để đi (sang trọng khôn ngoan), nhưng những gì về việc thêm một sự kiện trong global.asax.cs cho Application BeginRequest và lấy chuỗi từ tiêu đề và tiêm một cookie vào Yêu cầu chính mình (Forms xác thực sau đó sẽ chọn lên).

Cái gì như:


protected void Application_BeginRequest() 
{ 
    // Your code here to read request header into cookieText variable 
    string cookieText = ReadCookieFromHeader(); 

    var cookieData = FormsAuthentication.Decrypt(cookieText); 

    if (!cookieData.Expired) 
    { 
     HttpContext.Current.Request.Cookies.Add(new HttpCookie(cookieData.Name, cookieText)); 
    } 
} 

SỰ TỪ BỎ: Xin lưu ý rằng tôi đã không kiểm tra này, chỉ cần ném một cách tiếp cận có thể theo cách của bạn!

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