Как проверяется/проверяется заголовок базовой аутентификации в 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 с той, что в БД??

Я хотел бы знать, какова стандартная практика проверки базового запроса на аутентификацию?

Пожалуйста, предложите несколько идей. Я только начинаю, пожалуйста, извините за глупость в вопросах.

Author: Hooked, 2014-09-12

1 answers

Я предлагаю вам использовать маркер api, а не комбинацию пользователя и пароля. с помощью простого токена аутентификации вы получаете два преимущества.

  1. Имена пользователей или пароли могут меняться со временем, и если это так, пользователь вынужден изменить все имена пользователей и пароли в своем приложении, чтобы вернуть приложение к работе. простой токен постоянен и не требует никаких изменений при изменении имени пользователя и пароля пользователя.

  2. С помощью базовой авторизации клиенту необходимо отправить там имя пользователя + пароль в незашифрованном формате. это не очень безопасно, и в худшем случае несанкционированный может войти в серверную часть службы с именем пользователя + паролем из запроса. простой токен действителен только для вызовов 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
}
 3
Author: ins0, 2014-09-12 07:27:17