2009-12-11 33 views
12

Chúng tôi có một ứng dụng web ASP.Net chạy trên IIS6 quản lý cơ sở dữ liệu riêng của người dùng.ASP.Net - Sử dụng xác thực cơ bản mà không cần người dùng Windows

Trang web chỉ cho phép truy cập ẩn danh và tất cả xác thực/bảo mật được quản lý bằng chính ứng dụng của chúng tôi.

Chúng tôi có một trang chứa bảng dữ liệu HTML mà chúng tôi nhập vào Excel và sau đó được sử dụng cho mục đích Báo cáo. Trang hiện không có bảo mật được triển khai.

Chúng tôi cần thêm bảo mật cho trang này để các bảng tính này rơi vào tay kẻ xấu sau đó dữ liệu không thể "Làm mới" mà không cung cấp tên người dùng/mật khẩu.

Nếu tôi đặt trang này không cho phép truy cập Anonymouse thì tôi có thể sử dụng Xác thực cơ bản/Windows với Người dùng Windows để bảo mật trang này. Sau đó, khi Excel làm mới dữ liệu, hộp thoại mật khẩu sẽ bật lên.

Vấn đề là tôi cần có khả năng bảo mật trang này dựa trên Người dùng trong cơ sở dữ liệu của chúng tôi và họ sẽ không phải là người dùng Windows. Tôi cũng cần phải làm điều đó theo cách cho phép Excel quản lý xác thực không bao gồm bất kỳ xác thực dựa trên Biểu mẫu nào.

Bất kỳ ai có ý tưởng nào? Có thể để có được IIS để tìm nơi khác cho nó xác thực cơ bản?

Trả lời

10

Ok, vì vậy tôi đã tìm thấy hai giải pháp cho vấn đề này. Một trong những nhờ vào câu trả lời của Zhaph - Ben Duguid, đó là một HttpModule cho phép ASP.Net quản lý hoàn toàn xác thực.

Giải pháp thứ hai và giải pháp mà tôi đang thực hiện, là nhờ câu hỏi/câu trả lời này.

HTTP Authentication (Basic or Digest) in ASP Classic via IIS

Tôi đã tước này xuống và có một khai thác thử nghiệm đơn giản mà dường như làm việc tốt. Trong ví dụ này, thay vì một cuộc gọi cơ sở dữ liệu, nó chỉ kiểm tra xem tên người dùng và mật khẩu có phù hợp và coi đó là đã được xác thực hay không.

using System; 
using System.Text; 

namespace AuthenticationTests 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      string authorisationHeader = Request.ServerVariables["HTTP_AUTHORIZATION"]; 

      if (authorisationHeader != null && authorisationHeader.StartsWith("Basic ", StringComparison.InvariantCultureIgnoreCase)) 
      { 
       string authorizationParameters = Encoding.Default.GetString(Convert.FromBase64String(authorisationHeader.Substring("Basic ".Length))); 
       string userName = authorizationParameters.Split(':')[0]; 
       string password = authorizationParameters.Split(':')[1]; 

       if (userName == password) //Perform your actual "login" check here. 
       { 
        //Authorised! 
        //Page loads as normal. 
       } 
       else 
       { 
        Unauthorised(); 
       } 
      } 
      else 
      { 
       Unauthorised(); 
      } 
     } 

     private void Unauthorised() 
     { 
      Response.AddHeader("WWW-Authenticate", "Basic"); 
      Response.Status = "401 Unauthorized"; 
      Response.End(); 
     } 
    } 
} 
+0

Điều này có ảnh hưởng đến bảo mật không? – Joyce

1

Tôi không phải là chuyên gia nhưng tôi nghĩ điểm cơ bản là xác thực Windows. Bạn có thể chạy một kịch bản để đồng bộ hóa người dùng DB của bạn với Active Directory của bạn?

Nếu là AD công ty, bạn có thể xem xét việc có AD thứ hai chỉ dành cho ứng dụng của bạn và đồng bộ hóa người dùng từ cả AD công ty và DB của bạn. Nếu bạn không cần phải đồng bộ hóa mật khẩu (ví dụ: xây dựng trang pwd-mgmt trong trang web của mình), bạn chỉ có thể sử dụng tập lệnh hoặc C# hoặc thứ gì đó. Nếu bạn muốn một cái gì đó tinh vi hơn với đồng bộ hóa mật khẩu tích hợp, bạn có thể xem ILM 2007 (sắp tới là FIM 2010).

+0

Vấn đề ở đây là tôi không có cách nào để biết những gì bất kỳ mật khẩu người dùng hiện có nào. Tất cả chúng đều được ướp muối và băm nhỏ. –

+0

Làm thế nào nếu bạn đặt phương thức đồng bộ hóa của bạn tại chỗ (trong nền) và sau đó hết hạn tất cả các mật khẩu để người dùng phải thiết lập các mật khẩu mới? – serialhobbyist

1

Trang có phải là tệp .html hoặc tệp .aspx không? Nếu đó là tệp .aspx, bạn nên giữ trang này dưới quyền truy cập ẩn danh và kiểm tra xác thực trong chính trang

+0

Đây là trang ASPX để tôi có thể viết bất kỳ mã .net/C# nào cần thiết cho nó. Tuy nhiên, có thể đi qua IIS dưới dạng ẩn danh và sau đó vẫn thực hiện xác thực kiểu xác thực HTTP tùy chỉnh không? Bạn có ví dụ nào về điều này không? –

+0

Tôi không chắc tôi hiểu câu hỏi của bạn. Bạn nói "tất cả xác thực/bảo mật được quản lý bằng chính ứng dụng của chúng tôi". Vì vậy, tôi giả sử một khi người dùng đăng nhập có một biến Session bắt đầu, phải không? Ở đầu trang kiểm tra biến đó, nếu không được đặt, chuyển hướng đến "login.aspx" – SergeyKazachenko

+1

Trang được truy cập bằng Excel ... Excel không biết phải làm gì với trang chuyển hướng đến Login.aspx. –

6

Vì bạn đã có cơ sở dữ liệu người dùng tùy chỉnh, tôi khuyên bạn nên xây dựng nhanh membership provider nói chuyện với lược đồ cơ sở dữ liệu của bạn.

MSDN có ví dụ tốt trên "How to: Sample Membership Provider".

Sau đó, bạn có thể sử dụng standard access control mechanisms of ASP.NET để khóa trang, yêu cầu xác thực, v.v., cùng với các điều khiển như Login, LoginStatus và những người khác cung cấp nhiều giao diện người dùng bạn cần.


Chỉnh sửa để thêm

Một nhanh chóng search tìm thấy những điều sau đây, trong đó sức giúp đỡ:

Web Service Security - Basic HTTP Authentication without Active Directory

đâu Greg Reinacker trình bày "làm việc một đầy đủ mẫu trong 100% m mã anaged thể hiện việc sử dụng xác thực HTTP cơ bản, sử dụng kho lưu trữ thông tin xác thực riêng (trong trường hợp này là tệp XML, mặc dù điều này sẽ dễ dàng thay đổi sang cơ sở dữ liệu hoặc lưu trữ LDAP). "

+0

Tôi có thể sai ở đây, nhưng điều này không dựa vào kiểu xác thực Biểu mẫu, ví dụ: yêu cầu trang đưa người dùng đến trang đăng nhập trước khi quay lại trang gốc. Vấn đề là, điều này là không thể từ Excel đó là lý do tại sao tôi cần nó để sử dụng HTTP Auth, ví dụ, xác thực cơ bản. –

+0

Ah, tôi thấy bạn chỉ, nhưng sau đó bạn đang bị mắc kẹt mà không có người dùng windows - đó là như serialhobbyist chỉ ra, những gì cơ bản Auth sử dụng. –

+0

Tôi đã thấy một số ứng dụng có thể có của một HttpModule để thực hiện xác thực cơ bản bên ngoài IIS. Tôi sẽ đăng bài ở đây nếu tôi có bất kỳ thành công nào. –

1

Tôi đã viết thư viện có tên FSCAuth có thể trợ giúp việc này. Nó tầm thường có thể được thiết lập chỉ để xác thực cơ bản mà không có Active Directory. thay vào đó nó sẽ đọc dữ liệu người dùng của bạn ra khỏi một cơ sở dữ liệu/file/bất cứ nơi nào (thậm chí còn có một bộ nhớ chỉ UserStore)

Đó là BSD cấp phép at Binpress

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