Một lần đăng nhập giữa nhiều ứng dụng ASP.NET MVC Câu hỏi


8

Tôi đã làm việc trên một ứng dụng ASP.NET MVC 4 sử dụng xác thực dựa trên mẫu. Người dùng được xác nhận chống lại nhà cung cấp thành viên dựa trên lựa chọn nhà cung cấp trên biểu mẫu đăng nhập. Ví dụ: tại thời điểm này có hai nhà cung cấp: thư mục hoạt động và nhà cung cấp tùy chỉnh gọi một dịch vụ web bên ngoài. Nếu người dùng hợp lệ thì chúng tôi cập nhật thông tin trong bảng người dùng cục bộ của chúng tôi, như ngày đăng nhập cuối cùng, v.v ... Nếu người dùng hợp lệ và không tồn tại trong bảng người dùng cục bộ, chúng tôi sẽ thêm họ. Khi tất cả điều này được thực hiện, chúng tôi đặt cookie và chuyển sang nội dung chính. Tất cả các bộ điều khiển kiểm tra User.Identity.IsAuthenticated và quay lại trang đăng nhập nếu thử nghiệm thất bại.

Bây giờ tôi được thông báo rằng ứng dụng này đang đi từ một ứng dụng web duy nhất sang một giải pháp đa ứng dụng. Mỗi ứng dụng nên tồn tại độc lập với các ứng dụng khác, chia sẻ giao diện giống nhau và sử dụng cùng chức năng đăng nhập. Mỗi ứng dụng có thể yêu cầu một nhà cung cấp thành viên mới được thêm vào. Chúng tôi cũng sẽ thêm dữ liệu để giới hạn quyền truy cập vào các ứng dụng. Một người dùng chỉ có thể có quyền truy cập vào một trong các ứng dụng trong khi người dùng khác có quyền truy cập vào tất cả các ứng dụng đó.

Thiết lập lưu trữ dữ liệu không phải là một vấn đề. Chia sẻ bố cục từ một ứng dụng sẽ được sử dụng trong các ứng dụng khác cũng không phải là vấn đề. Điều tôi gặp khó khăn là quyết định làm thế nào để tinh chỉnh lại chức năng đăng nhập, như vậy, việc thêm một nhà cung cấp thành viên mới và ứng dụng trên đường xuống sẽ không yêu cầu chúng tôi xuất bản lại các ứng dụng hiện có. Ngay bây giờ họ cũng sẽ không muốn một trang khởi động đăng nhập cho các ứng dụng. Họ muốn người dùng truy cập thẳng vào một ứng dụng, đăng nhập và làm những gì họ đến đó để làm. Vì vậy, tôi có thể đi đến http://site1.mysites.com , đăng nhập và làm việc của tôi trong khi anh chàng bên cạnh tôi đi vào http://site2.mysites.com , nhật ký và thực hiện công việc của mình.

Tôi đang gặp khó khăn trong việc quấn đầu xung quanh cách tốt nhất để làm điều này. Suy nghĩ đầu tiên của tôi là một dịch vụ web WCF để đăng nhập. Tôi sẽ có một hành động điều khiển gọi dịch vụ web thông qua thông tin đăng nhập. Nếu đăng nhập thành công, sau đó tôi có thể nhận được một danh sách các ứng dụng cho người dùng từ bộ nhớ cục bộ. Thêm nhiều ứng dụng sẽ không yêu cầu chúng tôi xuất bản lại các ứng dụng hiện có do không có thay đổi trong dịch vụ web cho các ứng dụng đó.

Tôi cũng tiếp tục nghe về công cụ API Web ASP.NET này. Tôi có nên đi tuyến đường đó thay thế? Tôi có thể muốn xây dựng một trang web xung quanh việc quản lý cơ sở dữ liệu người dùng cục bộ để có một trang web lưu trữ api web có thể là một tùy chọn.

Là công cụ API Web cho tình huống này? Nếu không, nó có giữ lợi thế so với dịch vụ web WCF không? Có phương pháp khác để đạt được kết quả cuối cùng của tôi?

Câu trả lời:


1

Có vẻ như các yêu cầu duy nhất của bạn cho rằng bạn thực sự đang đi đúng hướng rằng bạn sẽ cần một nhà cung cấp xác thực phổ quát bên ngoài cho tất cả các ứng dụng của mình, đặc biệt là yêu cầu thay đổi Nhà cung cấp thành viên khi bạn đặt nó không thể và không nên dẫn đến bản phát hành mới cho ứng dụng của bạn.

Tại nhà cung cấp xác thực toàn cầu, bạn có thể kiểm soát các trang web nào sử dụng nhà cung cấp thành viên nào và thậm chí có thể khuất phục các trách nhiệm như ủy quyền Vai trò và Đặc quyền cho nhiều người dùng khác nhau sau khi xác thực họ.

Tuy nhiên, tôi khuyên bạn nên thận trọng với cách tiếp cận WCF vì dường như các dịch vụ web dựa trên SOAP đang dần bị thay thế về tầm quan trọng bởi các dịch vụ web dựa trên REST giống như những gì được cung cấp trong ASP.NET Web API. Tương lai của các ứng dụng là điện thoại di động và mọi nền tảng phát triển di động lớn đều hỗ trợ mạnh mẽ cho các dịch vụ web dựa trên REST.

Nếu bạn thậm chí có một chút nghi ngờ rằng cuối cùng bạn có thể cần mở rộng hỗ trợ nhà cung cấp thành viên cho các ứng dụng di động thì đó là một ý tưởng tốt để từ bỏ WCF. Hơn nữa, các dịch vụ web dựa trên REST cho phép tích hợp tốt hơn bởi các bên thứ ba (có lẽ khách hàng muốn tích hợp với gói phần mềm của bạn?) Để liên lạc với ứng dụng của bạn và truy xuất thông tin từ nó.

Theo như các giao thức xác thực cho các dịch vụ web dựa trên REST, dường như không có cách nào tốt để làm điều này, nhưng bảo mật là khá cần thiết. Có một bài viết hay về cách bảo mật các yêu cầu xác thực của bạn cho ứng dụng nhà cung cấp xác thực của bạn. http://codebetter.com/johnvpeteren/2012/04/02/making-your-asp-net-web-apis-secure/


Cảm ơn các đầu vào. Tôi đã nghĩ nhiều về WCF. Tôi tin rằng tôi sẽ làm việc để xây dựng một giải pháp dựa trên REST và bảo mật nó dựa trên liên kết đó.
fkm71
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.