Zastanawiałem się, czy można umieścić niestandardowe dane w nagłówku autoryzacji HTTP. Projektujemy RESTful API i możemy potrzebować sposobu na określenie niestandardowej metody autoryzacji. Na przykład nazwijmy to FIRE-TOKEN
uwierzytelnianiem.
Czy coś takiego byłoby ważne i dozwolone zgodnie ze specyfikacją: Authorization: FIRE-TOKEN 0PN5J17HBGZHT7JJ3X82:frJIUN8DYpKDtOLCwo//yllqDzg=
Pierwsza część drugiego ciągu (przed ':') to klucz API, druga część to skrót zapytania.
źródło
Umieść go w osobnym, niestandardowym nagłówku.
Przeciążenie standardowych nagłówków HTTP prawdopodobnie spowoduje więcej zamieszania, niż jest to warte, i naruszy zasadę najmniejszego zaskoczenia . Może to również prowadzić do problemów ze współdziałaniem dla programistów klientów API, którzy chcą używać gotowych zestawów narzędzi, które mogą obsługiwać tylko standardową formę typowych nagłówków HTTP (takich jak
Authorization
).źródło
Authorization
nagłówek z własnym schematem powinien być więcej niż wystarczający. Dodatkowo unikasz żądań pochodzenia przed lotem, jak wskazuje @wilmoore. Schematy niestandardowe nie kolidują z żadnym znanym mi w miarę współczesnym serwerem HTTP, a jeśli używasz własnego schematu, będziesz musiał sam go przeanalizować - żadna biblioteka nie powinna powodować konfliktów (w przeciwnym razie biblioteka jest źle napisana).Authorization
nagłówku, a nie w niestandardowym nagłówku, jest fakt, że serwery proxy i programy rejestrujące wiedzą, że traktują informacje jako poufne.Nie, to nie jest poprawna produkcja zgodnie z definicją „poświadczeń” w dokumencie RFC 2617 . Podajesz prawidłowy schemat uwierzytelniania, ale wartości parametrów auth-param muszą mieć postać
token "=" ( token | quoted-string )
(patrz sekcja 1.2), a Twój przykład nie używa „=” w ten sposób.źródło
Stare pytanie znam, ale dla ciekawskich:
Wierz lub nie, ale ten problem został rozwiązany ~ 2 dekady temu za pomocą protokołu HTTP BASIC, który przekazuje wartość jako nazwa użytkownika: hasło zakodowane w base64. (Zobacz http://en.wikipedia.org/wiki/Basic_access_authentication#Client_side )
Możesz zrobić to samo, aby powyższy przykład wyglądał następująco:
źródło