Obecnie pracuję nad REST-API, które jest chronione przez HTTP-Basic dla środowiska programistycznego. Ponieważ prawdziwe uwierzytelnianie odbywa się za pomocą tokena, wciąż próbuję dowiedzieć się, jak wysłać dwa nagłówki autoryzacji.
Próbowałem tego:
curl -i http://dev.myapp.com/api/users \
-H "Authorization: Basic Ym9zY236Ym9zY28=" \
-H "Authorization: Bearer mytoken123"
Mógłbym na przykład wyłączyć uwierzytelnianie HTTP dla mojego adresu IP, ale ponieważ zwykle pracuję w różnych środowiskach z dynamicznymi adresami IP, nie jest to dobre rozwiązanie. Więc coś mi brakuje?
400 Bad request
. Głupi.Odpowiedzi:
Spróbuj tego, aby przekazać uwierzytelnianie podstawowe pod adresem URL:
Jeśli powyższy nie działa, to nie masz z tym nic wspólnego. Więc wypróbuj następujące alternatywy.
Możesz przekazać token pod inną nazwą. Ponieważ obsługujesz autoryzację z aplikacji. Możesz więc łatwo wykorzystać tę elastyczność do tego specjalnego celu.
Zauważ, że zmieniłem nagłówek na
Application-Authorization
. Więc z aplikacji złap token pod tym nagłówkiem i przetwórz to, co musisz zrobić.Inną rzeczą, jaką możesz zrobić, to przejść
token
przezPOST
parametrów i weź wartość parametru od strony serwera. Na przykład przekazanie tokena z parametrem curl post:źródło
-v
param. Przekonasz się, że jest wysyłanyAuthorization: Basic Ym9zY236Ym9zY28=, Authorization: Bearer mytoken123
w nagłówku żądania. Od strony serwera, jeśli sprawdzisz, zobaczysz, że masz taki nagłówek AuthorizationAuthorization: Basic Ym9zY236Ym9zY28=, Bearer mytoken123
oddzielony przecinkiem. Więc pomyślałem, że powinienem zaproponować ci zastępców.Standard ( https://tools.ietf.org/html/rfc6750 ) mówi, że możesz użyć:
Możliwe jest więc przekazanie wielu tokenów okaziciela z URI, ale robienie tego jest odradzane (patrz sekcja 5 w standardzie).
źródło
Jeśli używasz zwrotnego serwera proxy, takiego jak nginx, możesz zdefiniować niestandardowy token, taki jak
X-API-Token
.W nginx przepisałbyś go tak, aby zewnętrzny serwer proxy (pozostałe api) był po prostu auth:
... podczas gdy nginx może użyć oryginalnego nagłówka Authorization do sprawdzenia HTTP AUth.
źródło
Miałem podobny problem - uwierzytelnij urządzenie i użytkownika na urządzeniu. Użyłem
Cookie
nagłówka obokAuthorization: Bearer...
nagłówka.źródło
Cookie
Nagłówek jest już często wykorzystywane do uwierzytelniania.źródło
Istnieje inne rozwiązanie do testowania interfejsów API na serwerze deweloperskim.
HTTP Basic Authentication
tylko dla tras internetowychKonfiguracja serwera WWW dla
nginx
iLaravel
wyglądałaby następująco:Authorization: Bearer
wykona zadanie obrony serwera programistycznego przed robotami internetowymi i innymi niechcianymi użytkownikami.źródło
Z nginx możesz wysłać oba tokeny w ten sposób (nawet jeśli jest to niezgodne ze standardem):
Działa to tak długo, jak podstawowy token jest pierwszy - nginx pomyślnie przekazuje go do serwera aplikacji.
Następnie musisz się upewnić, że aplikacja może poprawnie wyodrębnić Bearer z powyższego ciągu.
źródło