2010-04-14 8 views
7

Mam następujący scenariusz:przysięgłe WCF: Pierwsze kontekst Aktualny Zabezpieczenia

  • Mam dane różnych użytkownika przechowywane w mojej bazy danych.
  • Te dane wprowadzono za pośrednictwem aplikacji internetowej.
  • Chcielibyśmy udostępnić te dane użytkownikowi za pośrednictwem serwisu internetowego, aby mógł on integrować dane z ich aplikacjami.
  • Chcielibyśmy również przedstawić niektóre logiki biznesowej w odniesieniu do tych usług. Jako takie nie chcemy używać OData.
  • Jest to aplikacja dla wielu dzierżawców, więc chcę tylko udostępnić im dane ich, a nie innym użytkownikom. Podobnie przedstawiona przez nas logika biznesowa powinna odnosić się do uwierzytelnionego użytkownika.

Chciałbym, aby użytkownik użył schematu OASIS do uwierzytelnienia w usłudze sieciowej - WCF już teraz pozwala na to po wyjęciu z pudełka, o ile rozumiem - lub może wydamy im certyfikaty do uwierzytelnienia z . Ten kawałek jeszcze nie został opracowany.

Tutaj jest trochę pseudo-kodu, jak ja sobie wyobrazić to będzie działać w ramach usługi:

function GetUsersData(id) 
var user := Lookup User based on Username from Auth Context 
var data := Get Data From Repository based on "user" 
return data 
end function 

Dla scenariusza logiki biznesowej myślę, że będzie to wyglądać mniej więcej tak:

function PerformBusinessLogic(someData) 
var user := Lookup User based on Username from Auth Context 
var returnValue := Perform some logic based on supplied data 
return returnValue 
end function 

Trochę tu chodzi o pobranie bieżącej nazwy użytkownika (lub informacji o certyfikacie w scenariuszu certyfikatu), z którą użytkownik został uwierzytelniony!

Czy WCF włączy nawet ten scenariusz? Jeśli nie, czy WSE3 to umożliwi?

Dzięki,

Odpowiedz

16

Gdyby naprawdę nie być zbyt trudne, myślę:

  • jeśli użytkownicy uwierzytelnione z poświadczeń użytkownika systemu Windows na usługi WCF, będziesz w stanie znaleźć ich poświadczenia pod

    ServiceSecurityContext.Current.WindowsIdentity 
    
  • jeśli użytkownicy uwierzytelniane za pomocą certyfikatu, znajdziesz swoją tożsamość (który będzie CertificateIdentity zamiast Wi ndowsIdentity) pod

    ServiceSecurityContext.Current.PrimaryIdentity 
    

otrzymał tożsamość systemu Windows, można również podawać się danego numeru dla kolejnych połączeń w dół do firmy lub danych warstw, jeśli to konieczne - Sprawdź docs MSDN Delegation and Impersonation with WCF lub Google lub Bing dla "Podszywanie się pod WCF" powinno dać ci mnóstwo wartościowych linków na ten temat.

Jeśli nie działa system Windows ani ścieżka certyfikatu, funkcja WCF umożliwia także utworzenie własnego niestandardowego schematu uwierzytelniania. W takim przypadku należy zapisać rozszerzenie WCF, podłączyć je, a następnie pobierz nazwę użytkownika/hasło do swoich użytkowników wywołujących, aby sprawdzić, czy masz do czynienia z jakimkolwiek niestandardowym sklepem.

WCF daje Ci elastyczność na wiele sposobów - bardzo wątpię, że znajdziesz scenariusz, który działa na WSE3, ale nie działa równie dobrze (lub lepiej) w WCF!

+0

Fantastyczne, dzięki! Dokładnie o tym myślę, z jakiegoś powodu chyba zgubiłem to w dokumentacji. –

+0

Próbuję też to zrobić. Chciałbym, aby działało na mojej lokalnej maszynie działającej od klienta testowego działającego również na moim komputerze lokalnym. Skonfigurowałem SSL i poprawną (myślę) konfigurację wiązania HTTPS. Widzę, że bieżący kontekst ma wartość NULL, a kontekst anonimowy, chociaż nie jest wartością NULL, nie ma wartości, których oczekiwałbym, ponieważ nazwa użytkownika jest pustym ciągiem. Czy są jakieś ustawienia IIS, które należy zmienić? – topwik

+0

nagle ServiceSecurityContext.Current.PrimaryIdentity działa, nie ma już wartości NULL i widzę, że oczekiwana nazwa użytkownika jest wypluwana w liniach debugowania, ale debuger VS nie debuguje mojego serwera WWW mówiąc, że coś nie jest poprawnie skonfigurowane. – topwik