Podstawowe uwierzytelnianie z usługą WCF REST na coś innego niż konta windows?

Czy istnieje czysty sposób na ujawnienie usługi WCF REST, która wymaga podstawowego uwierzytelnienia, ale gdzie sami zajmujemy się rzeczywistą walidacją nazwy użytkownika/hasła? Wygląda na to, że kiedy w konfiguracji mówisz WCF, że chcesz użyć uwierzytelniania podstawowego, wymusza to włączenie uwierzytelniania podstawowego w IIS, a IIS może wykonywać tylko uwierzytelnianie podstawowe przeciwko kontom okien.

Jedynym włamaniem, jakie znaleźliśmy, jest okłamanie WCF i powiedzenie mu, że nie ma zabezpieczeń w Serwisie, a następnie zrobienie uwierzytelnianie poza stosem WCF przy użyciu generycznej IHttpModule (która ma własny plik konfiguracyjny wskazujący, które adresy URL mają jakie wymagania dotyczące uwierzytelniania / autoryzacji).

Wydaje się, że powinien być lepszy sposób. Ktoś ma?

 29
Author: Erv Walter, 2009-03-19

5 answers

Biblioteka WCF REST Contrib umożliwia tę funkcjonalność:

Http://github.com/mikeobrien/WcfRestContrib

Pozwala również zabezpieczyć poszczególne operacje.

 9
Author: hcoverlambda,
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
2011-07-26 13:08:39

To nazwa użytkownika i hasło ustawione na kliencie w następujący sposób:

cc.ClientCredentials.UserName.UserName = ReturnUsername();
cc.ClientCredentials.UserName.Password = ReturnPassword();

Czy są one osadzone w treści reszty wiadomości?

Jeśli pierwszy, możesz użyć niestandardowego UserNamePasswordValidator: http://msdn.microsoft.com/en-us/library/aa702565.aspx

Jeśli to ostatnie, możesz ustawić usługę NA no security i użyć niestandardowego Menedżera ServiceAuthorizationManager, aby zweryfikować zawartość wiadomość: http://msdn.microsoft.com/en-us/library/ms731774.aspx

Mam nadzieję, że jedno lub drugie pomoże! Spróbowałbym opublikować przykładowy kod i konfigurację, ale jestem @ home i nie mam dostępu do kodu, który jest wszystkim @ work.
 4
Author: CodingWithSpike,
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-18 23:28:09

Zobacz własne uwierzytelnianie podstawowe dla usług RESTful . Podejście Pablo wykorzystuje funkcjonalność interceptor, która jest dostarczana przez zestaw startowy REST, aby rozwiązać problem. Jeśli nie chcesz polegać na zestawie startowym REST, możesz utworzyć własnego hosta usługowego i skorzystać z dostarczonej funkcjonalności inteceptor.

 4
Author: Eric Hauser,
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
2010-02-05 22:32:13

Jeśli hostujesz go w IIS, Użyj niestandardowego modułu http. Możesz sprowadzić dyrektora na stronę WCF, aby zabezpieczyć dostęp do kodu. Zobacz podstawowe uwierzytelnianie HTTP na kontach innych niż Windows w IIS/ASP. NET (Część 3 - dodanie obsługi WCF) . Zobacz także własne podstawowe uwierzytelnianie HTTP dla ASP.NET Web Services on. net 3.5 / VS 2008.

Jeśli nie używasz IIS, powinieneś być w stanie zaimplementować nazwę użytkownika. Zobacz Wreszcie! Username over Uwierzytelnianie transportu w WCF.

 3
Author: Eugene Yokota,
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
2017-05-23 12:30:26

Tak, oczywiście, że jest sposób. Należy skonfigurować niestandardową wartość userNamePasswordValidationMode dla usługi i skierować ją do klasy z nadpisaną metodą, która może sprawdzić i zweryfikować dostarczone poświadczenia. Podczas wykonywania wywołania RESTful, te poświadczenia podczas korzystania z podstawowego uwierzytelniania w odpowiedniej formie powinny znajdować się w nagłówku żądania. Za pomocą tej niestandardowej metody możesz sprawdzić poświadczenia, a następnie uwierzytelnić klienta do swojej usługi. Brak kont Windows lub domeny nawet potrzebne.

Najfajniejsze jest to, że możesz przenieść ten kontekst bezpieczeństwa na następny poziom i zapewnić autoryzację drobnoziarnistą na poziomie metody. Możesz mieć przypadki, w których duża pula klientów jest w stanie uzyskać dostęp do usługi, ale nie wszystkie metody wewnątrz (tj. W tym przypadku możesz również zapewnić autoryzację na poziomie metody, jeśli jest to konieczne.

Poniżej jest rozwiązanie krok po kroku (ze zbyt wieloma krokami do osadzenia) przeze mnie, że zawiera zarówno wymaganą konfigurację, jak i zabezpieczenia wymagane do posiadania kompletnego rozwiązania . Problem polega na tym, że często podstawowe uwierzytelnianie jest używane bez zabezpieczenia transportu certyfikatem SSL i jest to złe. Upewnij się, że wykonasz wszystkie kroki, a zaimplementujesz podstawowe uwierzytelnianie bez potrzeby jakichkolwiek kont Windows lub konfiguracji w usłudze WCF RESTful.

Usługi RESTful: Uwierzytelnianie Klientów Za Pomocą Podstawowych Uwierzytelnianie

 1
Author: atconway,
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-06-02 02:55:51