2011-01-27 14 views
9

Mój scenariusz to aplikacja trójwarstwowa, w której warstwa danych jest bazą danych SQL Server, warstwa środkowa jest aplikacją WCF obsługiwaną w usłudze systemu Windows, a na końcu prezentacja jest aplikacją Asp.Net MVC .Uwierzytelnianie WCF/ASP.NET

Jak zwykle, warstwa środkowa jest tą, która wykonuje całą logikę biznesową. Dostęp do bazy danych, definiowanie reguł biznesowych .. itd.

Okay, jak na razie tak dobrze! ALE oto pytanie: Jak radzisz sobie z zabezpieczeniami w takim scenariuszu? Chodzi o to, że użytkownik musi zalogować się do aplikacji ASP.NET, ale chcę ją uwierzytelnić nie tylko w ASP, ale także w środkowej warstwie WCF, ponieważ usługa WCF ma być dostępna dla większej liczby aplikacji.

Chcę, aby użytkownik zalogował się w aplikacji Asp.Net i pozwolił WCF znać również poświadczenia. Czy jest jakiś rodzaj sesji w WCF, w której można określić zalogowanego użytkownika?

W jaki sposób profesjonaliści zajmują się bezpieczeństwem w tym przypadku? Wiem, że możesz zabezpieczyć usługi WCF za pomocą zabezpieczenia wiadomości, ale w jaki sposób synchronizacja Asp.Net i WCF dla jednego zalogowanego użytkownika? Chcę zabezpieczyć operacje WCF w zależności od użytkownika w celu uzyskania autoryzacji.

+0

To jest zbyt duże pytanie do obsługi na SO - zajmuje 50 stron w zestawie treningowym WCF. Zasugeruj, aby zacząć od kilku badań, a następnie opublikować konkretne pytania - http://mscerts.net/programming/user-level%20security%20%20%20authorization%20and%20impersonation%20%28part%201%29%20 -% 20authorization.aspx –

+0

Aplikacja N-Tier? Co to jest N? 2? 3? 20? –

+0

Jest to sformułowane ogólnikowo, ale pytanie jest nadal aktualne. Chcę, aby użytkownik uwierzytelniony przez ASP.NET został przekazany do łańcucha do usługi WCF jako zalogowany użytkownik. Dlaczego to takie trudne? – DaveN59

Odpowiedz

2

Sugerowałbym patrząc stosując podejście jak HMAC (Hash Message Authentication Code) dla własnego bezpieczeństwa, lub podobnego podejścia opartego symboliczną. Chodzi o to, aby podpisać twoje żądania do twojej warstwy WCF, które mogą być użyte do uwierzytelnienia żądania i zidentyfikowania użytkownika, który złożył wniosek.

Zasadnicze elementy byłyby tokenem i wspólnym sekretem używanym do podpisywania każdego wniosku. Token umożliwia identyfikację użytkownika na końcu WCF i wyszukiwanie wspólnego hasła w celu zweryfikowania żądania. Możesz również dodać sygnatury czasowe/inne, aby zapobiec atakom powtórki i tym podobnym.

Użyłem tego podejścia w przypadku niektórych usług REST zbudowanych na bazie WCF - z dodatkową korzyścią, że klienci nie muszą przechowywać nazw użytkowników i haseł, tylko tokeny bezpieczeństwa używane do komunikacji. W twoim przypadku musisz uporządkować sposób wymiany tokenów między warstwą ASP.NET i warstwą WCF, ale zapewni to ujednoliconą metodę uwierzytelniania dla dowolnego użytkownika twoich usług WCF.