2009-12-07 15 views
5

Tworzę stronę internetową, która będzie zawierać zarówno strony ASP.NET, jak i aplet Flash. Chcę hermetyzować logikę biznesową w usłudze WCF, która będzie wyświetlana przez dwa punkty końcowe: Jeden dostępny przez Internet za pośrednictwem HTTP (S), do użytku przez klienta Flash, i jeden dostępny w centrum danych do użytku przez serwery aplikacji . Jeśli nie wydaje się to dobrym podejściem, zatrzymaj mnie tutaj; w przeciwnym razie przejdę dalej ...Uwierzytelnianie za pomocą tokenu w WCF

Pytanie dotyczy sposobu uwierzytelniania żądań pochodzących od klienta Flash. Ponieważ nie chcę przechowywać hasła użytkownika w pliku cookie przeglądarki, nie chcę wysyłać hasła przy każdym żądaniu i nie chcę używać HTTPS po początkowym logowaniu, planuję użyć tokena oparty system uwierzytelniania. Nie chcę również, aby użytkownik musiał logować się do klienta Flash po zalogowaniu się na stronie, więc planuję użyć JavaScript, aby przekazać token do klienta Flash po uruchomieniu.

Wiem, że obsługuje WCF za pomocą wbudowanego systemu zabezpieczeń .NET Framework (System.Security) w celu wymuszenia kontroli dostępu i chciałbym skorzystać z tego.

Pytanie brzmi: Jak przekazać token do usługi WCF, gdy jest wywoływana przez Flash, i jak przetworzyć token na serwerze?

  • WCF ma „wydany tokena” tryb uwierzytelniania, ale wydaje się to ma być stosowany w pełnowymiarową scenariuszu federacyjnym z bezpiecznym Reklamowe Usługi i tokeny SAML - nieco więcej złożoności, że naprawdę chcieć. Można korzystać z tego trybu za pomocą własnych żetonów "prostych losowych ciągów"? Jeśli tak to jak? Pamiętaj, że musi to być zgodne z Flash.
  • Mogę potencjalnie przekazać token w nagłówku (nagłówek SOAP lub nagłówek HTTP). W takim przypadku, gdy ustalę, który użytkownik wysyła żądanie, w jaki sposób mogę poinformować strukturę, aby sprawdzenia System.Security zadziałały?
  • Czy jest inne podejście, które powinienem wziąć pod uwagę? Wszystko, co pozwala uniknąć wysyłania haseł w każdym żądaniu, pozwala używać System.Security, a praca z Flash jest możliwa.
+0

Aaron, czy kiedykolwiek wymyśliłeś prosty sposób na zrobienie tego? Próbuję wykonać proste uwierzytelnianie oparte na tokenach w WCF i wydaje się to znacznie trudniejsze niż powinno. – technophile

+0

Skończyło się na tym, że przewróciłem swój własny.Mam jeden punkt końcowy WCF, który wydaje tokeny - pobiera nazwę użytkownika i hasło, weryfikuje je i odpowiada tokenem, który w moim przypadku jest po prostu ciągiem losowym. Rzeczywiste metody logiki biznesowej znajdują się na innym punkcie końcowym, który ma niestandardowego kontrolera wiadomości, który odczytuje niestandardowy nagłówek zawierający token. Na kliencie inny inspektor wiadomości dodaje nagłówek do wychodzących wiadomości. To więcej pracy, niż bym chciał, ale wygląda na to, że działa dobrze. – Aaron

Odpowiedz

2

Jak się wydaje oryginalne pytanie zostało odebrane Będę to krótkie, ale jedno podejście będzie faktycznie przekazać token uwierzytelniania w nagłówku HTTP i zastąpić CheckAccess(OperationContext operationContext, ref Message message) w zwyczaju ServiceAuthorizationManager.

Poprzednio skonfigurowano usługę, aby używać niestandardowej zasady implementującej IAuthorizationPolicy.

Pozostaje tylko wdrożyć proste klasy IIdentity i IPrincipal, aby zapisać swój stan autoryzacji.

Szereg dobrych artykułów istnieje na ten temat:

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

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

Chyba to nadal może czuć się jak rozwiązania "roll-your-own", ale jej przynajmniej uspokajający kiedy podążasz za ustalonym wzorcem. Ma tę zaletę, że czarną skrzynkę kodu autoryzacji z twoich metod obsługi.

Powiązane problemy