2012-04-30 30 views
6

Tôi cần mở rộng tính năng xác thực WCF tích hợp, vì vậy, tính năng mới của tôi sẽ hoạt động song song với các tính năng được tích hợp sẵn.WCF mở rộng xác thực

Ví dụ: tôi muốn cho phép truy cập từ IP đã đăng ký (auth custom) hoặc với tên người dùng + mật khẩu (auth built-in).

Tôi đã triển khai thành công ServiceAuthenticationManagerServiceAuthorizationManager.

ServiceAuthenticationManager.Authenticate chỉ cần thêm IPrincipal thực hiện để tính nhắn, ServiceAuthorizationManager.CheckAccessCore bản IPrincipal từ tính chất thông báo đến để AuthorizationContext tài sản.

Tuy nhiên, ServiceAuthenticationManager.Authenticate bị hỏng hoàn toàn đối với các cơ chế tiêu chuẩn, ngay cả khi tôi trả lại authPolicy hoặc kết quả của cuộc gọi base.Authenticate.

Có thể tôi đã đi sai hướng? Cách chính xác để thêm xác thực WCF tùy chỉnh, không ảnh hưởng đến những cái hiện có là gì? Làm thế nào để dự phòng để xác thực được xây dựng trong nếu tùy chỉnh thất bại?

Trả lời

0

cách tiếp cận đúng:

Cài đặt ServiceHost trong OnOpening ghi đè

Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom; 
Authorization.ExternalAuthorizationPolicies = new ReadOnlyCollection<IAuthorizationPolicy>(new[] { new MyCustomAuthorizationPolicy() }); 

Trong phương pháp Đánh giá của chính sách tùy chỉnh gán ba đặc tính của bối cảnh đánh giá "PrimaryIdentity" để IIdentity, "sắc" vào bộ sưu tập của bản sắc và "Hiệu trưởng" tới IPrincipal

evaluationContext.Properties["PrimaryIdentity"] = identity; 
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity }); 
evaluationContext.Properties["Principal"] = principal; 
Các vấn đề liên quan