2009-12-07 40 views
5

Tôi đang tạo trang web chứa cả trang ASP.NET và ứng dụng Flash. Tôi muốn đóng gói logic kinh doanh của tôi trong một dịch vụ WCF sẽ được tiếp xúc thông qua hai điểm cuối: Một truy cập qua Internet thông qua HTTP (S), để sử dụng bởi Flash client và một truy cập trong trung tâm dữ liệu để sử dụng bởi các máy chủ ứng dụng . Nếu điều này dường như không phải là cách tiếp cận tốt, thì hãy dừng tôi lại đây; nếu không, tôi sẽ chuyển sang ...Xác thực dựa trên mã thông báo trong WCF

Câu hỏi là cách xác thực yêu cầu đến từ ứng dụng Flash. Vì tôi không muốn lưu trữ mật khẩu của người dùng trong cookie của trình duyệt, không muốn gửi mật khẩu với mọi yêu cầu và không muốn phải sử dụng HTTPS sau lần đăng nhập đầu tiên, tôi dự định sử dụng mã thông báo- dựa trên hệ thống xác thực. Tôi cũng không muốn người dùng phải đăng nhập vào ứng dụng Flash sau khi đã đăng nhập vào trang web, vì vậy tôi dự định sử dụng Javascript để chuyển mã thông báo cho khách hàng Flash khi nó bắt đầu.

Tôi biết WCF hỗ trợ bằng khung bảo mật tích hợp của .NET Framework (System.Security) để thực thi kiểm soát truy cập và tôi muốn tận dụng điều này.

Câu hỏi, sau đó là: Làm cách nào để chuyển mã thông báo cho dịch vụ WCF khi được Flash gọi và cách xử lý mã thông báo trên máy chủ?

  • WCF có một "dấu hiệu ban hành" chế độ xác thực, nhưng nó xuất hiện này được thiết kế để sử dụng trong một kịch bản liên full-blown với một dịch vụ Mã an toàn và SAML mã thông báo - nhiều hơn một chút phức tạp mà tôi thực sự muốn. Có thể sử dụng chế độ này với các mã thông báo "chuỗi ngẫu nhiên đơn giản" của riêng tôi? Nếu vậy, làm thế nào? Hãy ghi nhớ điều này cần phải tương thích với Flash.
  • Tôi có khả năng chuyển mã thông báo trong tiêu đề (tiêu đề SOAP hoặc tiêu đề HTTP). Trong trường hợp này, khi tôi đã xác định người dùng nào đang thực hiện yêu cầu, làm thế nào để tôi thông báo cho khung làm việc để kiểm tra System.Security hoạt động?
  • Có cách tiếp cận hoàn toàn khác mà tôi nên cân nhắc không? Bất cứ điều gì tránh việc gửi mật khẩu trong mọi yêu cầu, cho phép tôi sử dụng System.Security và làm việc với Flash là một khả năng.
+0

Aaron, bạn đã bao giờ tìm ra cách đơn giản để làm điều này chưa? Tôi đang cố gắng để làm một số xác thực dựa trên token đơn giản trong WCF và nó có vẻ khó khăn hơn rất nhiều so với nó nên. – technophile

+0

Tôi đã kết thúc về cơ bản lăn của riêng tôi.Tôi có một điểm cuối WCF phát hành mã thông báo - phải có tên người dùng và mật khẩu, xác minh chúng và trả lời bằng mã thông báo, trong trường hợp của tôi chỉ đơn giản là một chuỗi ngẫu nhiên. Các phương thức logic nghiệp vụ thực tế nằm trên một điểm cuối khác, có một trình kiểm tra thông báo tùy chỉnh đọc một tiêu đề tùy chỉnh có chứa mã thông báo. Trên máy khách, trình kiểm tra thư khác thêm tiêu đề cho các thư gửi đi. Đó là công việc nhiều hơn tôi đã có thể thích làm, nhưng nó có vẻ là làm việc tốt. – Aaron

Trả lời

2

Như có vẻ như câu hỏi ban đầu đã được trả lời, tôi sẽ giữ này ngắn gọn, nhưng có một cách tiếp cận thực sự sẽ để vượt qua xác thực token trong một tiêu đề http và ghi đè CheckAccess(OperationContext operationContext, ref Message message) trong một tùy chỉnh ServiceAuthorizationManager.

Trước đó bạn sẽ định cấu hình dịch vụ để sử dụng chính sách tùy chỉnh triển khai IAuthorizationPolicy.

Tất cả những gì còn lại là triển khai các lớp IIdentityIPrincipal đơn giản để lưu trữ trạng thái ủy quyền của bạn.

Một số điều tốt tồn tại về chủ đề này:

http://msdn.microsoft.com/en-us/library/system.identitymodel.policy.iauthorizationpolicy.aspx

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

Tôi đoán đây vẫn có thể cảm thấy như một giải pháp "roll-bạn-của riêng", nhưng nó ít nhất yên tâm khi bạn đang theo dõi một mô hình đã được thiết lập. Nó có lợi thế của black-boxing mã ủy quyền của bạn từ các phương pháp dịch vụ của bạn.

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