Зачем вам base64 кодировать заголовок авторизации?
API Twitter требует отправки заголовка авторизации, который представляет собой кодировку base64 ключа API, соединенного с секретным ключом API. В Node я использую:
var base64 = new Buffer(apiKey + ':' + apiSecret).toString('base64');
Отправленный заголовок становится:
Authorization: 'Basic ' + base64
Какой смысл в base64 кодировании строки "apiKeyHere:apiSecretHere"? Почему бы просто не принять заголовок авторизации, содержащий необработанные учетные данные API?
Этот вопрос похож на вопрос: " Какова цель кодирования base 64 и почему он используется в HTTP Basic Authentication? но проголосовавший ответ не полностью отвечает на мой вопрос. Ключ API и секретный ключ API уже являются HTTP-совместимыми символами. Они выглядят примерно так (они не настоящие):
Ключ потребителя (ключ API) 8dme3utVQfOhlPk5BUG9XbFxR
Секрет пользователя (секрет API) QFZXoC7MP72JZtGMBNpjLGI4Vl1xr1q9dyPLp3u7jGtkESpbLm
Так зачем base64 его кодировать? Кроме того, в этом сообщении говорится, что "цель кодирования состоит в том, чтобы закодировать не HTTP-совместимые символы, которые могут быть в имени пользователя или пароле, в те, которые HTTP-совместимы". Разве имя пользователя и пароль уже не будут HTTP-совместимыми символами?
3 ответа
Несмотря на то, что я не могу найти его в документации w3, я считаю, что это просто протокол для кодирования учетных данных заголовка Authorization в base64, независимо от того, какой контент у него есть. В случае с Twitter это не имеет большого значения, как вы сказали, но в других случаях учетные данные могут содержать эти символы. Чтобы сохранить его единообразным и предотвратить ошибки того, должен ли он быть закодирован или нет, все учетные данные должны быть закодированы.
Другая причина может заключаться в том, что браузеры также кодируют учетные данные таким же образом. Twitter, вероятно, также хочет принять это.
Строка должна быть в кодировке base64 не для безопасности, а для кодирования не HTTP-совместимых символов в HTTP-совместимые символы, которые могут быть в имени пользователя или пароле.
По умолчанию параметры поля заголовка сообщения в Hypertext Transfer Protocol (HTTP)
сообщения не могут содержать символы за пределами набора символов ISO- 8859-1.
Если имя пользователя и пароль содержат несовместимую кодировку, HTTP не сможет перенести этот текст. во избежание этого мы кодируем имя пользователя и пароль с base64, чтобы убедиться, что мы отправляем HTTP-совместимый символ через HTTP. для получения дополнительной информации см. эту https://en.wikipedia.org/wiki/Basic_access_authentication