2011-07-20 2 views
10

Tôi hiện đang phát triển ứng dụng web MVC3 cần yêu cầu người dùng extranet đăng nhập và được xác thực bằng Xác thực Mẫu. Người dùng mạng nội bộ nên được đăng nhập tự động bằng cách sử dụng xác thực Windows.
Tôi đã tìm thấy bài viết này, http://aspalliance.com/553_Mixed_Mode_Authentication.all nhưng ngày tháng 11 năm 2004 và muốn tìm nội dung nào đó được viết gần đây hơn 7 năm trước.ASP.NET Mixed Forms/Windows Authentication

Kế hoạch của tôi là có hai ứng dụng trong IIS, với các thư mục ảo trỏ vào cùng một thư mục vật lý, nhưng một sẽ cho phép truy cập ẩn danh và người kia sẽ không.

Khi người dùng được xác thực trên Windows/Intranet, tôi hy vọng chỉ đơn giản là mô phỏng người dùng đăng nhập thông qua xác thực biểu mẫu. Có bất kỳ cạm bẫy nào cho phương pháp này không? Bất kỳ ý tưởng tốt hơn?

EDIT: 7/22/2011

Tôi đang sử dụng IIS7 mà sẽ không cho phép tôi làm nhiều trong những điều gợi ý trong các bài viết cũ. Do xác thực được tích hợp chặt chẽ hơn một chút giữa IIS7 và các trang web ASP.NET, một số thứ không được phép. Ví dụ: tôi không thể đặt Windows Auth trên một tệp trong khi phần còn lại của ứng dụng đang sử dụng Biểu mẫu xác thực.

+0

Bạn định lập mô phỏng người dùng đăng nhập bằng biểu mẫu bằng cách nào? Bạn sẽ tạo người dùng trong bảng thành viên ASP cho họ? – Erix

+0

Có. Mỗi cửa sổ người dùng sẽ có vai trò (nhóm trong Windows) sẽ tương ứng với một người dùng trong thành viên asp. Vì vậy, nếu họ nằm trong Nhóm quản trị trong cửa sổ, họ sẽ được đăng nhập với tư cách là người dùng Quản trị viên trong Biểu mẫu. Đối với người dùng Windows, sẽ chỉ có nhiều vai trò khi có người dùng trong bảng thành viên ASP, mỗi người có mối quan hệ 1-1 (Người dùng với vai trò). –

Trả lời

3

Tự hỏi nếu cách tiếp cận tốt nhất ở đây sẽ không có hai ứng dụng trong đó ứng dụng đầu tiên sử dụng xác thực cửa sổ và chỉ bao gồm một dấu móc tới sự kiện PostAuthenticate trong đường dẫn HTTP. Nếu người dùng được xác thực, bạn cung cấp cho họ vé biểu mẫu và chuyển hướng đến ứng dụng đích, App2, sử dụng xác thực biểu mẫu. Bạn phải cẩn thận rằng các cookie không phải là đường dẫn cụ thể và cả hai ứng dụng nằm trên cùng một máy chủ (hoặc các khóa mã hóa được đồng bộ hóa trong web.config). Nếu người dùng không được xác thực, bạn chỉ cần chuyển hướng chúng mà không cần một vé auth và họ đăng nhập khi đến App2.

App1: www.myUrl.com \ MyApp

Đây là "công cộng" url cho ứng dụng và phát hiện người sử dụng mạng bằng cách gắn vào sự kiện PostAuthenticate (xem Professional ASP.NET 2.0 Security, Membership, and Role Management):

//Hook PostAuthenticateRequest inside of global.asax 
void Application_PostAuthenticateRequest(Object sender, EventArgs e) 
{ 
    IPrincipal p = HttpContext.Current.User; 

    if (p.Identity.IsAuthenticated) 
    { 
     // to do: give them a non-path specific ticket and redirect to App2 
    } 
} 

App2: www.myUrl.com \ MyApp2

Đây là ứng dụng thực tế. Khi người dùng mạng đến từ App1, họ sẽ có vé biểu mẫu. Khi người dùng không có mạng đến, họ sẽ được chuyển hướng đến login.aspx.

Ghi chú: Một trong những nhược điểm này là nếu người dùng mạng đánh dấu App2. Tôi không hoàn toàn chắc chắn làm thế nào tôi sẽ có được xung quanh này. Nếu họ có một cookie không hết hạn, nó sẽ không quan trọng quá nhiều. Một tùy chọn là đặt liên kết trên trang đăng nhập có nội dung như "Tôi đã là người dùng mạng - đăng nhập tự động", liên kết lại với App1, nơi họ sẽ đăng nhập?

Tôi có một số mã để hỗ trợ phát hành biểu mẫu vé. Tôi sẽ cập nhật câu trả lời khi tôi có thời gian.

Lưu ý rằng bạn sẽ phải thực hiện một số bước chân quản lý vai trò ưa thích trong App2 để xử lý các nhà cung cấp vai trò khác nhau.Đó là tài liệu tham khảo Amazon ở trên là cũ, nhưng tôi thấy bản thân mình liên tục tham khảo nó khi tôi chạy vào các loại vấn đề xác thực và ủy quyền tùy chỉnh.

+0

Cảm ơn bạn đã nhập Brett. Đăng nhập cho người dùng mạng không quan trọng, nhưng mong muốn của khách hàng. Tôi sẽ tiếp tục xem xét các tùy chọn của tôi, bao gồm cả các tùy chọn của bạn, khi tôi phải triển khai chức năng này. –

+0

Tôi đã đi rất nhiều tuyến đường này. Đã có rất nhiều trở ngại để vượt qua, nhưng nó hoạt động cho hầu hết các phần. Tôi đã thêm url cho trang web Windows Auth (Site1) vào miền trang web nội bộ cục bộ, do đó người dùng được tự động đăng nhập, sau đó được chuyển hướng đến Site2. –

0

Điều này là hoàn toàn có thể, nếu bạn sẽ tạo hai ứng dụng khác nhau trong IIS, vì vậy bạn đã hoàn thành công việc! =)

+0

Không phải với IIS7. Khi bạn thay đổi ứng dụng trong IIS7 từ các hình thức để xác thực Windows, hoặc ngược lại, nó sửa đổi WebConfig cho dự án. Tôi sẽ có hai ứng dụng, nhưng cả hai đều sẽ trỏ vào cùng một thư mục vật lý trong hồ sơ. Việc thay đổi loại xác thực trong một ứng dụng sẽ ảnh hưởng đến loại khác. –