2009-07-28 25 views
17

Tôi đang làm việc với Dịch vụ RIA Silverlight và tôi muốn tạo xác thực tùy chỉnh. Điều này dường như là điều duy nhất mà hầu như không có tài liệu (tôi đã đọc qua toàn bộ RIAServicesOverview.docx).Dịch vụ RIA: Làm cách nào để tạo xác thực tùy chỉnh?

Bạn có biết cách nào để tôi tạo dịch vụ xác thực khách hàng không? Tôi không muốn sử dụng mô hình thành viên ASP.NET mặc định. Tôi không biết những gì giao diện hoặc lớp trừu tượng tôi cần phải thực hiện - mặc dù tôi đã tìm thấy System.Web.Ria.ApplicationServices.IAuthentication.

Tôi có cần triển khai IAuthentication không? Nếu vậy, bạn có thể cho tôi một số lời khuyên về cách đi về làm như vậy? Đây là những phương pháp sau đây:

public User GetUser(); 

    public User Login(string userName, string password, bool isPersistent, string customData); 

    public User Logout(); 

    public void UpdateUser(User user); 

Tôi không biết làm thế nào tôi sẽ thực hiện bất kỳ trong số này (trừ Login) - làm thế nào có thể dịch vụ có thể biết những gì người dùng đang đăng nhập để cho Thoát() để công việc?

Tôi đã tẩy trang web để tìm cách thực hiện việc này hàng giờ và tôi không thể tìm thấy bất kỳ điều gì mô tả cách tạo một DomainService đơn giản có thể được sử dụng để xác thực người dùng trong "RIA được liên kết "Dự án Silverlight.

Nếu ai đó có thể làm sáng tỏ điều này, tôi xin chân thành biết ơn.

Cảm ơn,
Charles


[EDIT]
Tôi tìm thấy RIA Services page on the MSDN Code Gallery. Có một phần được gọi là Authentication Samples, liên kết đến một số mẫu mã tuyệt vời. Kiểm tra xem bạn có muốn biết thêm về cách xác thực hoạt động trong RIA Services hay không.

Trả lời

20

Nếu bạn tạo "Ứng dụng doanh nghiệp Silverlight", bạn sẽ thấy cách mẫu triển khai xác thực. (Hoặc chỉ cần đi here and download the template sample project.)

Để đơn giản hóa, đây là quá trình tôi đã sử dụng:

Trước tiên, tôi tạo ra một dịch vụ tên miền (FooService) có nguồn gốc từ LinqToEntitiesDomainService nơi FooContext là mô hình tổ chức của tôi. Trong đó tôi thêm tất cả các hoạt động CRUD để truy cập vào bảng DB tùy chỉnh của tôi và trả về các hồ sơ người dùng.

Tiếp theo, tạo một lớp người dùng cụ thể về các serverside bằng cách bắt nguồn từ userbase:

using System.Web.Ria; 
using System.Web.Ria.ApplicationServices; 

public class User : UserBase 
{} 

Cuối cùng, lấy một lớp từ AuthenticationBase và thực hiện bốn phương pháp sau đây:

[EnableClientAccess] 
public class AuthenticationService : AuthenticationBase<User> 
{ 
    private FooService _service = new FooService(); 

    protected override bool ValidateUser(string username, string password) 
    { 
     // Code here that tests only if the password is valid for the given 
     // username using your custom DB calls via the domain service you 
     // implemented above 
    } 

    protected override User GetAuthenticatedUser(IPrincipal pricipal) 
    { 
     // principal.Identity.Name will be the username for the user 
     // you're trying to authenticate. Here's one way to implement 
     // this: 
     User user = null; 
     if (this._service.DoesUserExist(principal.Identity.Name)) // DoesUserExist() is a call 
                    // added in my domain service 
     { 
      // UserProfile is an entity in my DB 
      UserProfile profile = this._service.GetUserProfile(principal.Identity.Name); 
      user.Name = profile.UserName; 
      user.AuthenticationType = principal.Identity.AuthenticationType; 
     } 
     return user; 
    } 

    public override void Initialize(DomainServiceContext context) 
    { 
     this._service.Initialize(context); 
     base.Initialize(context); 
    } 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
      this._service.Dispose(); 
     base.Dispose(disposing); 
    } 
} 
+0

Cảm ơn, đó là những gì tôi đang tìm kiếm. Chúc mừng – Charles

+0

* tìm kiếm * ... ngón tay bơ của tôi và tôi sẽ không nhớ tùy chọn Chỉnh sửa cho nhận xét ... – Charles

+0

Bạn có thể giải thích câu trả lời này chi tiết hơn một chút không?Tôi đang thực sự đấu tranh để thực hiện xác thực bình thường và tôi không thể tìm thấy bất kỳ nguồn thông tin nào tốt mà không hoàn toàn mơ hồ và giả định kiến ​​thức rồi. Tôi thực sự sẽ đánh giá cao một số trợ giúp. – Goober

0

Làm thế nào về thực hiện giao diện IAuthorization?

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