@Alex_mc
Веселый препод :)

Какой способ лучщий для авторизации REST API в сборке JS(клиент) и PHP(сервер)?

Доброе время суток,
Собственно, частичный ответ нашел вот тут, но не до конца.
Суть проекта такова:
1. JS, HTML система, очень много страниц.
2. Сервер обработчик PHP, MySQL.

единственный логический способ это HTML5 LocalStorage который будет содержать token и с каждым запросом доставать из LocalStorage token.

Вопросы:
1. Есть ли более лучший способ?
2, Стоит ли отказаться от LocalStorage и перейти на PHP variable? не вижу разницы особой, только в том что токен не виден на стороне клиента.
3. Стоит ли шаманить на стороне сервера? Сессии или Куки? не вижу смысла но все-же, может я что то пропустил.
4. как обезопасить все это?

Заранее спасибо
  • Вопрос задан
  • 14597 просмотров
Решения вопроса 1
@Alex_mc Автор вопроса
Веселый препод :)
В общем так, 2 дня шаманство и куча всяких бесполезных статей, я разобрался во всем.

Внедрение довольно простое. только вместо cURL использовл AJAX.
Скрипт на PHP , пояснения тут.
Я не использовал последний пункт (Create an Authorize Controller), пока не понял для чего он. Если кто сможет, поясните.

Теперь JS:

1. Получаем токен через AJAX.
$.ajax({
    url: "token.php", // Линк API обработчика.
    beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", "Basic " + btoa("testclient:testpass"));  // Логин и пароль по мануалу, заменить на свои после интеграции и сделать hash или md5 для пароля.
    },
    type: 'POST',
    dataType: 'json',
    data: {grant_type:"client_credentials"},
    success: function (data) {
      console.log(JSON.stringify(data.access_token)); // Проверка что токен получен. 
      localStorage.setItem('token', data.access_token); // Помещаем в LocalStorage для последующей проверки на других страницах.
      isAuth(data.access_token); // Запуск глобальной функции для проверки доступа, авторизирован или нет пользователь.
    }
});


собственно глобальная функция.
function isAuth(token){
		$.ajax({
		    url: "resource.php",
		    type: "POST",
		    dataType: "json",
		    //contentType: "application/json",
		        data: {access_token : token},
		    success: function (data) {
		      console.log(JSON.stringify(data));
                      // Функция обработчик.
		    }
		});
	}


Все работает, теперь шаманить с конфигурацией и настройкой глобальных функций.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
effetto
@effetto
.Net разработчик
Я рекомендую Вам использовать открытый стандарт OAuth. Для API я использую авторизацию на основании токенов Bearer. Вот, например, реализация от Твиттера. У всех больших социальных сетей существуют соответствующие решения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы