2012-04-30 12 views
6

Muszę rozszerzyć wbudowane uwierzytelnianie WCF, więc mój nowy powinien pracować obok siebie z wbudowanymi.Uwierzytelnianie WCF rozszerzenie

Na przykład chcę zezwolić na dostęp z zarejestrowanego adresu IP (autoryzacja niestandardowa) lub nazwa użytkownika + hasło (wbudowane uwierzytelnianie).

Pomyślnie zaimplementowałem ServiceAuthenticationManager i ServiceAuthorizationManager.

ServiceAuthenticationManager.Authenticate prostu dodaje IPrincipal wdrożenie do właściwości wiadomości, ServiceAuthorizationManager.CheckAccessCore kopie IPrincipal z przychodzących właściwości wiadomość do AuthorizationContext właściwości.

Jednak ServiceAuthenticationManager.Authenticate jest całkowicie zepsuty do standardowych mechanizmów, nawet jeśli wrócę authPolicy lub wynik base.Authenticate rozmowy.

Może poszedłem w złym kierunku? Jaki jest poprawny sposób dodawania niestandardowego uwierzytelniania WCF, nie wpływając na istniejące? Jak przywrócić wbudowane uwierzytelnianie, jeśli niestandardowy nie działa?

Odpowiedz

0

Prawidłowe podejście:

ServiceHost Setup OnOpening przesłonić

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

W metodzie Szacowanie polityki niestandardowego przypisać trzy właściwości kontekście oceny „PrimaryIdentity” do IIdentity „Tożsamości” do kolekcji tożsamości i "Principal" to IPrincipal

evaluationContext.Properties["PrimaryIdentity"] = identity; 
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity }); 
evaluationContext.Properties["Principal"] = principal; 
Powiązane problemy