To naprawdę zależy od scenariusza. - trudno powiedzieć, nie znając więcej o API - ale użycie "tokenów uwierzytelniania" jest daleka od uniwersalności, masz rację, że wiele interfejsów API nie potrzebuje (i nie używa ich). Wiele interfejsów API po prostu wymaga wysłania klucza API przy każdym żądaniu (często za pośrednictwem protokołu HTTPS, aby zapobiec przechwyceniu) lub wymagają klucza API do identyfikacji użytkownika, a także podpisu cyfrowego z "tajnym kluczem" w celu potwierdzenia tożsamości użytkownika (patrz When working with most APIs, why do they require two types of authentication, namely a key and a secret?). często używane w publicznych interfejsach API, ponieważ nie są wystarczająco elastyczne i nie zapewniają wystarczającej "separacji" między tożsamością użytkownika a tożsamością aplikacji. Na przykład. rejestrujesz się jako programista do korzystania z interfejsu API Flickr i tworzysz aplikację na iPhone'a, która korzysta z tego API - czy naprawdę chcesz, aby Twoja nazwa użytkownika/hasło programisty było wbudowane w aplikację? Co się stanie, jeśli później zmienisz hasło? Co zrobić, jeśli chcesz opracować 5 aplikacji i śledzić ich użycie osobno i mieć możliwość wyłączenia dowolnej aplikacji w dowolnym momencie bez wpływu na pozostałe?
Jednak w przypadkach, gdy naprawdę chcesz zidentyfikować tylko użytkownika, a nie aplikację (np. Prywatny back-end API, który będzie obsługiwał tylko twoje aplikacje, a nie publiczny interfejs API), w większości sytuacji nie robię tego. • widzisz wszystko, co jest nie tak, co sugerujesz, np. nazwa użytkownika/hasło przez HTTPS przy każdym żądaniu.Och, przy okazji, tokeny auth mają dodatkową zaletę: są "ograniczone" (mogą wygasać w określonym czasie, mogą być ograniczone tylko do niektórych działań, itp.), Ale oczywiście jest to użyteczne tylko w bardzo specyficznych sytuacjach.
RÓWNIEŻ: Jako użytkownik "Dan" wskazał powyżej, podczas projektowania interfejsu API, który wymaga wysłania nazwy użytkownika/hasła przy każdym żądaniu (lub na każde żądanie naprawdę, nawet jeśli jest to tylko żądanie logowania), należy uważać, jak to robisz to. Jeśli używasz techniki obsługiwanej domyślnie przez przeglądarkę (np. HTTP Basic Auth), uniemożliwiasz sobie narażanie interfejsu API bezpiecznie dla użytkowników z różnych domen (tzn. Najprawdopodobniej Twój interfejs API nigdy nie będzie bezpiecznie wywoływany bezpośrednio z przeglądarki , tj. z kodu AJAX/Flash/Silverlight).
Jest to złożony temat, którego nie można w pełni wyjaśnić tutaj, ale należy pamiętać, że jeśli interfejs API opiera się na wszelkich poświadczeniach bezpieczeństwa, które przeglądarka może zapamiętać, a następnie "cicho" wprowadza każde żądanie (np. HTTP Basic Auth , ciasteczka), to NIE jest bezpieczne włączanie dostępu międzydomenowego do tego interfejsu API przy użyciu dowolnej techniki międzydomenowej (CORS, JSONP, crossdomain.xml, itp.).
wszystkie wielkie informacje, ale jestem zdezorientowany, 1- Jak powinienem wysłać hasło do mojej usługi REST Jersey, planowałem wysłać nagłówek HTTP. 2 - Czy mógłbyś wyjaśnić, co masz na myśli przez "wtedy NIE jest bezpieczne włączanie dostępu międzydomenowego do tego interfejsu API przy użyciu dowolnej techniki międzydomenowej" Nie mam zielonego pojęcia, co to może oznaczać :) – Spring
Znowu wszystko zależy od Scenariusz. Czy jest to publiczny interfejs API dla wielu programistów lub prywatny, który zapewnia zaplecze dla własnych aplikacji? Czy próbujesz uwierzytelnić aplikację za pomocą interfejsu API lub użytkownika końcowego? Wszystko, co napisałem w drugim akapicie (dotyczące dostępu międzydomenowego) ma znaczenie tylko wtedy, gdy jest to publiczny interfejs API * i * chcesz, aby ludzie mogli uzyskać do niego dostęp z poziomu przeglądarki (np. Z kodu AJAX, z Flasha lub z Silverlight). We wszystkich innych przypadkach możesz zignorować te rzeczy. –
tnx tutaj moja aplikacja jest wyjaśniona; http://stackoverflow.com/questions/13997040/jersey-request-for- authentication – Spring