Как проверяется/проверяется заголовок базовой аутентификации в api rest
Я создаю очень крошечный api. В api я аутентифицирую запрос, используя заголовок базовой аутентификации, исходящий из запроса. Это код, до которого я дошел
$headers = apache_request_headers() ;
// print_r($headers);
if(isset($headers['Authorization'])){
//$credentials = base64_decode($headers);
print_r($headers['Authorization']);
}
Я получил заголовок авторизации как "Basic YXBpa2V5OmFqZWVzaA==
". Теперь как я проверю, действителен ли этот базовый заголовок авторизации?
Должен ли я декодировать строку base64 в формате имя пользователя:пароль и сверить ее с базой данных или при создании имени пользователя и пропуска мне нужно сохранить ее в формате base64 и сравнить строка запроса base64 с той, что в БД??
Я хотел бы знать, какова стандартная практика проверки базового запроса на аутентификацию?
Пожалуйста, предложите несколько идей. Я только начинаю, пожалуйста, извините за глупость в вопросах.
1 answers
Я предлагаю вам использовать маркер api, а не комбинацию пользователя и пароля. с помощью простого токена аутентификации вы получаете два преимущества.
Имена пользователей или пароли могут меняться со временем, и если это так, пользователь вынужден изменить все имена пользователей и пароли в своем приложении, чтобы вернуть приложение к работе. простой токен постоянен и не требует никаких изменений при изменении имени пользователя и пароля пользователя.
С помощью базовой авторизации клиенту необходимо отправить там имя пользователя + пароль в незашифрованном формате. это не очень безопасно, и в худшем случае несанкционированный может войти в серверную часть службы с именем пользователя + паролем из запроса. простой токен действителен только для вызовов api.
Создайте простой случайный токен для каждого пользователя API, например Eq57dwypZaFW4f2xxRzFaGjwCYinOn6l13Mvds00P2ZzgdMPTk
, и требуйте отправлять этот токен в каждом запросе api с заголовком запроса, например
X-API-TOKEN: Eq57dwypZaFW4f2xxRzFaGjwCYinOn6l13Mvds00P2ZzgdMPTk
X-API-CLIENT-ID: 123456
На стороне сервера выполните проверку с помощью
<?php
$token = $_SERVER['X-API-TOKEN'];
$userID = $_SERVER['X-API-CLIENT-ID'];
$isValid = $findInDatabase->findToken($userID, $token);
if( $isValid )
{
// process api request
} else {
// invalid token
}