Jak skonfigurować bezpieczne usługi RESTful za pomocą WCF przy użyciu nazwy użytkownika/hasła + SSL
Chcę napisać plik konfiguracyjny, który pozwala na RESTful services w WCF, ale nadal chcę mieć możliwość "podłączenia" dostawcy członkostwa do uwierzytelniania nazwy użytkownika/hasła.
Poniżej znajduje się część mojej bieżącej konfiguracji przy użyciu wiązania basicHttp lub wsHttp w / out WS Security, jak to zmieni się w / REST based services?
<bindings>
<wsHttpBinding>
<binding name="wsHttp">
<security mode="TransportWithMessageCredential">
<transport/>
<message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="false"/>
</security>
</binding>
</wsHttpBinding>
<basicHttpBinding>
<binding name="basicHttp">
<security mode="TransportWithMessageCredential">
<transport/>
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="NorthwindBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
7 answers
Oto podcast o zabezpieczeniu WCF REST services z ASP.net dostawca członkostwa:
Http://channel9.msdn.com/posts/rojacobs/endpointtv-Securing-RESTful-services-with-ASPNET-Membership/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-04 14:30:07
Zgadzam się z Darrelem, że złożone scenariusze odpoczynku nad WCF to zły pomysł. To po prostu nie jest ładne.
Jednak Dominick Baier ma kilkadobrych postów o tym na swoim blogu o najmniejszych przywilejach.
Jeśli chcesz zobaczyć obsługę uwierzytelniania WSSE z funkcją fallback to FormsAuthenticationTicket support NA WCF, sprawdź kod źródłowy BlogService.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 15:23:51
Zanim przejdziesz dalej tą ścieżką walki o zaimplementowanie odpoczynku nad WCF, sugeruję przeczytanie tego postu Tima Ewalda. Szczególnie wpłynęło na mnie następujące stwierdzenie:
Nie jestem pewien czy chcę budować na warstwa zaprojektowana do włączenia HTTP w wierzchnią warstwę, która została zaprojektowana do zastanów się.
Spędziłem ostatnie 12 miesięcy rozwijając rzeczy oparte na odpoczynku z WCF i to stwierdzenie okazało się być tak prawdziwe w kółko. IMHO to, co WCF wnosi do stołu, przewyższa złożoność, jaką wprowadza do wykonywania pracy w spoczynku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-27 14:50:32
Niezależnie od tego, czy społeczność ma opinie przeciwko REST na WCF (ja osobiście jestem na ogrodzeniu) Microsoft zrobił na nim zamach, http://msdn.microsoft.com/en-us/netframework/cc950529.aspx
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-30 19:06:45
Tak zgadzam się z Moto, link z WCF Starter Kit jest najbliższą rzeczą, jaką widziałem do uwierzytelniania poświadczeń za pomocą niestandardowego nagłówka HTTP ( http://msdn.microsoft.com/en-us/library/dd203052.aspx).
Jednak nie udało mi się uzyskać przykładu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-05 01:22:41
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-22 09:49:13
UPDATE 01/23/2012
Odkąd napisałem to pytanie, widziałem znacznie lepsze podejście do zabezpieczenia odpoczynku jak usługi internetowe w dziczy. Brzmiało to skomplikowanie, gdy po raz pierwszy o tym usłyszałem, ale pomysł jest prosty i w całej sieci zarówno dla usług internetowych, jak i innej bezpiecznej komunikacji.
Wymaga użycia kluczy publicznych / prywatnych.
1.) każdy użytkownik (klient) punktu końcowego będzie musiał zarejestrować się w usłudze REST web]}
- a.) dajesz temu użytkownikowi klucz prywatny, który nie powinien być współdzielony z anyone
- b.) generujesz również klucz publiczny, który może przejść przez przewód w razie potrzeby w postaci zwykłego tekstu (będzie to również używane do identyfikacji klienta)
2.) każde żądanie użytkownika musi wygenerować hash do podpisania żądania
- Na przykład: klucz prywatny + znacznik czasu + zakodowany ładunek (jeśli jest wystarczająco mały, jak na przykład prosta informacja o użytkowniku, która ma być zaktualizowana)
- b.) bierzesz te 3 (lub cokolwiek postanowiłeś) i wygenerować 1 way hash (używając na przykład hmac)
- c.) w żądaniu wysyłanym przez przewód należy podać klucz publiczny (aby strona serwera wiedziała, kto próbuje wysłać to żądanie), hash, który został wygenerowany z kluczem prywatnym oraz znacznik czasu.
3.) punkt końcowy serwera (twoja metoda REST) będzie musiał wygenerować hash przy użyciu tych samych danych wejściowych użytych w kliencie. Ten krok udowodni, że zarówno klient, jak i serwer znali prywatną klucz pasujący do klucza publicznego przekazany wraz z żądaniem. (to z kolei oznacza, że użytkownik wysyłający żądanie jest legalny, ponieważ nikt inny nie mógł znać klucza prywatnego)
-
A.) wyszukuje klucz prywatny klienta według klucza publicznego przekazywanego podczas żądania
-
B.) weź inne paramy (znacznik czasu i zakodowany ładunek) wraz z kluczem prywatnym znalezionym w poprzednim kroku i użyj tego samego algorytmu, aby wygenerować 1 way hash (ponownie HMAC jest to, co widziałem w świecie rzeczywistym)
W związku z tym, że nie jest to możliwe, nie jest to możliwe, ponieważ nie jest to możliwe, ponieważ nie jest to możliwe.]}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-24 02:58:27