Как передать Bearer-токен через браузер
Настроил nginx (пока что просто выдается листинг директорий) на проверку наличия в запросе заголовка с Bearer-токеном:
Authorization: Bearer #####
Реализация через такой способ в nginx.conf
:
http {
///
# Mapping Bearer tokens
map $http_authorization $is_auth {
default false;
"Bearer #####" true;
}
///
server {
listen 443 ssl http2;
///
# Bearer authorization
if ($is_auth = false) {
return 401;
}
///
}
}
Доступ к серверу через Postman или curl в норме. Но возник вопрос - можно ли каким-то образом в браузере получить доступ к такому серверу?
Пробовал указать как параметр URL, но это не работает - надеялся на то, что это сработает по аналогии с Basic Authentication внутри URL http://username:[email protected]/
:
https://Authorization=%22Bearer%20TOKEN%[email protected]/
https://Authorization:%22Bearer%20TOKEN%[email protected]/
https://dev-1.su/?Authorization=%22Bearer%20TOKEN%22
https://dev-1.su/?Authorization:%22Bearer%20TOKEN%22
Есть ли вариант передать Bearer-токен через браузер? Требуется ли как-то для этого донастроить nginx?
Ответы (1 шт):
На enSO в одном из ответов на вопрос "Basic HTTP and Bearer Token Authentication" сообщается, что можно использовать параметр URI access_token
для передачи Bearer-токена:
URI Query Parameter: access_token=mytoken123
В моем nginx
такой способ не сработал по умолчанию.
Однако можно написать дополнительный map
для поиска токена в URI:
http {
///
# Mapping request for authorization token
map $request_uri $authorization_token {
# Если не нашли параметр в URI - пытаемся найти в заголовках
default $http_authorization;
# Ищем в URI после "authorization="
~*(?<=authorization\=)(?<token>[\S]+)$ "Bearer $token";
}
# Mapping Bearer tokens
# В $authorization_token окажется либо параметр URI, либо заголовок
map $authorization_token $is_auth {
default false;
"Bearer #####" true;
}
///
В итоге nginx будет реагировать и пропускать URI следующего вида:
Однако, как указал @andreymal - браузеры работают с Basic Authentication, но не с Bearer. Из-за этого при переходах по директориям придется в строке браузера каждый раз дописывать ?authorization=TOKEN
, т.к. браузер в памяти держать Bearer-токен не будет (в отличии от Basic после ввода логина и пароля).
Поэтому если очень нужно обеспечить доступ через браузер, то проще использовать Basic Authentication. К тому же, такая аутентификация настраивается намного проще.