2010-05-20 12 views
6

Zajmuję się tworzeniem usługi internetowej i muszę wysłać nazwę użytkownika i hasło do usługi w metodzie GET. Czy wysyłanie tych informacji w uri jest w porządku tak długo, jak przechodzi przez bezpieczny kanał, taki jak ssl? Innymi słowy, czy mogę mieć uri, który wygląda jak/users/{username}/{cleartext_password}?Wysyłanie nazwy użytkownika i hasła do usługi WWW

Edycja: Przepraszam, myślę, że byłem niejasny. Usługa sieciowa jest w zasadzie tylko bazą danych nazw użytkowników i zakodowanych haseł. Wyobraź sobie aplikację komputerową, która przechowuje nazwy użytkowników i hasła w zdalnej bazie danych. Użytkownik końcowy wpisuje swoją nazwę użytkownika i hasło do aplikacji, a aplikacja uzyskuje dostęp do usługi internetowej w celu uwierzytelnienia użytkownika.

Aplikacja będzie musiała więc wysłać do użytkownika nazwę użytkownika końcowego i hasło w postaci zwykłego tekstu. Usługa pobierze nazwę użytkownika i hasło oraz sprawdzi, czy nazwa użytkownika i hash hasła są zgodne z nazwą użytkownika i hashowanym hasłem w bazie danych. Sama aplikacja będzie musiała uwierzytelnić się przed uzyskaniem dostępu do usługi, ale zastanawiam się, jaki jest najlepszy sposób na wysłanie nazwy użytkownika i hasła użytkownika końcowego do usługi uwierzytelniania użytkownika końcowego. Nie używam metody POST, ponieważ po prostu uwierzytelniam i dlatego nie zmieniam stanu serwera. Przepraszam za zamieszanie.

Odpowiedz

0

Ogólnie rzecz biorąc nie jest to dobry pomysł ... Dane te będą obecne w wielu plikach dziennika, w związku z czym dane mogą być widoczne dla osób, które nie powinny ich widzieć. Przynajmniej powinieneś zaszyfrować lub zaszyfrować go przed wysłaniem, jeśli możesz.

Oto powiązany dyskusja o trochę więcej szczegółów ... Is an HTTPS query string secure?

+0

Albo można patrzeć w sposób uwierzytelnienia dwukierunkowego SSL.Użytkownicy potrzebowaliby certyfikatów w taki sam sposób jak serwery, ale serwer może następnie bezpiecznie uwierzytelnić użytkownika. – mpez0

0

Jeśli to się dzieje za pośrednictwem bezpiecznego kanału, nie ma problemu wysyłając nazwę użytkownika i hasło jako zwykłego tekstu. Zalecałbym, aby nigdy nie wysyłać ich jako zwykłego tekstu przez niezabezpieczony kanał i nie wysyłać go wielokrotnie dla każdego żądania.

Co można zrobić, to najpierw uwierzytelnić się w usłudze sieciowej (wysłać nazwę użytkownika i hasło za pośrednictwem ssl jako zwykły tekst) i pobrać token z serwera, który będzie rozpoznawał. Następnie wyślij token z każdym następnym żądaniem.

+0

Google, na przykład, umożliwia wysłanie nazwy użytkownika i hasła za pośrednictwem protokołu SSL w celu pobrania identyfikatora SID dla swojego interfejsu API ... następnie wysyła ten identyfikator SID w pliku cookie przy każdym kolejnym żądaniu GET. Działa dobrze. – EAMann

7

Zrób to.

Wyślij "klucz" i "skrót".

"Klucz" jest odpowiednikiem nazwy użytkownika.

"Podsumowanie" to skrót SHA1 (lub MD5) klucza, identyfikator URI i "wspólny klucz tajny" lub hasło.

Gdy serwer otrzyma to, oblicza własną wersję podsumowania na podstawie klucza, żądanego identyfikatora URI i "wspólnego hasła" lub hasła. Brak dopasowania trawienia to odpowiedź błędu 401.

+0

To naprawdę bardzo eleganckie rozwiązanie ... – EAMann

0

SSL szyfruje URI, ale zdecydowanie warto przyjrzeć się alternatywnym rozwiązaniom.

Podstawowe HTTP Auth jest ładne i proste, i dobrze obsługiwane przez przeglądarki, serwerach itp

też nie skończy się w plikach dzienników w takim samym stopniu jak URI

NB: To tylko niektóre zwykłe nagłówki HTTP, więc zdecydowanie NIE są zalecane dla aplikacji nie korzystających z SSL.

http://en.wikipedia.org/wiki/Basic_access_authentication

Powiązane problemy