Настройка авторизации через OAUTH2 сервера https://oauth2.volmed.org.ru: различия между версиями
Перейти к навигации
Перейти к поиску
Misha (обсуждение | вклад) (→Формирование строки авторизации) |
Misha (обсуждение | вклад) м (→Формирование строки авторизации) |
||
Строка 19: | Строка 19: | ||
Для перехода на страницу сервера авторизации, генерим следующий код | Для перехода на страницу сервера авторизации, генерим следующий код | ||
<pre> | <pre> | ||
− | $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; | + | if (!empty($_GET['code'])) { // Если это уже ответ oauth2 сервера (Есть параметр state) |
− | $state = generate_string($permitted_chars, 20); // | + | if ($_GET['state'] == $_SESSION['state']) { // Если state совпадает с сохраненным в Сессии |
− | $_SESSION['state'] = $state; // Сохраняем | + | $oauth2_access = $this->oauth2_post(); // Посылаем уже с помощью POST запрос |
− | $url_data = [ | + | $this->auth = $this->auth($oauth2_access); |
− | + | } else die('Ошибка авторизации (Invalid state), обратитесь к администраотру сайта'); // если state не совпал, то ошибка | |
− | + | } else { // Ето первый цикл обращения к oauth2 серверу | |
− | + | $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // список символов, из которых будем генерить state | |
− | + | $state = generate_string($permitted_chars, 20); // Генерим код state - 20 символов случайного кода | |
− | ]; | + | $_SESSION['state'] = $state; // Сохраняем в сессии |
− | $url = $GLOBALS['oauth2_url'] . '?' . http_build_query($url_data); // | + | $url_data = [ |
− | header('Location:' . $url); // | + | 'response_type' => 'code', |
+ | 'client_id' => $GLOBALS['id_resource'], // ID сервиса в МИАЦ | ||
+ | 'state' => $state, // Случайный код, который сервис должен вернуть | ||
+ | 'redirect_uri' => $GLOBALS['redirect_uri'] // Адрес возврата дб вв виде https://sait.volmed.org.ru | ||
+ | ]; | ||
+ | $url = $GLOBALS['oauth2_url'] . '?' . http_build_query($url_data); // URL для отправки на сервер авторизации | ||
+ | header('Location:' . $url); // | ||
+ | exit; | ||
+ | } | ||
</pre> | </pre> | ||
После перехода на сервер авторизации, вводим Логин и Пароль. И если он правильный, то сервер возвращает на страницу редиректа | После перехода на сервер авторизации, вводим Логин и Пароль. И если он правильный, то сервер возвращает на страницу редиректа |
Версия 16:26, 6 мая 2025
Подготовительные операции
- Идем в БД oauth_db на сервере 172.16.130.31 и добавляем в таблицу oauth_clients
- client_id - Номер WEB интерфейса, который вы собираетесь подключить
- client_secret - Набор любых символов для шифрования
- Добавляем в настроечный файл сервиса следующие строки
$GLOBALS['id_resource'] = 7; // Номер WEB интерфейса $PassLength=5; //длина пароля $GLOBALS['jwt_key'] = 'sdklfwiomwefwepiojwepjowfmwfmwef'; // Строка с набором символов для шифрования JWT токена $GLOBALS['max_time'] = 3600 * 24 * 7; // Время жизни COOKIES, например, 7 суток $oauth2_url = 'https://oauth2.volmed.org.ru'; // URL сервиса авторизации $GLOBALS['oauth2_url'] = $oauth2_url; $redirect_uri = $http."://$_SERVER[HTTP_HOST]"; $GLOBALS['redirect_uri'] = $redirect_uri;
- Для работы с JWT токеном используем библиотеку https://github.com/firebase/php-jwt. Ее нужно установить в каталог class/jwt
Формирование строки авторизации
Для перехода на страницу сервера авторизации, генерим следующий код
if (!empty($_GET['code'])) { // Если это уже ответ oauth2 сервера (Есть параметр state) if ($_GET['state'] == $_SESSION['state']) { // Если state совпадает с сохраненным в Сессии $oauth2_access = $this->oauth2_post(); // Посылаем уже с помощью POST запрос $this->auth = $this->auth($oauth2_access); } else die('Ошибка авторизации (Invalid state), обратитесь к администраотру сайта'); // если state не совпал, то ошибка } else { // Ето первый цикл обращения к oauth2 серверу $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // список символов, из которых будем генерить state $state = generate_string($permitted_chars, 20); // Генерим код state - 20 символов случайного кода $_SESSION['state'] = $state; // Сохраняем в сессии $url_data = [ 'response_type' => 'code', 'client_id' => $GLOBALS['id_resource'], // ID сервиса в МИАЦ 'state' => $state, // Случайный код, который сервис должен вернуть 'redirect_uri' => $GLOBALS['redirect_uri'] // Адрес возврата дб вв виде https://sait.volmed.org.ru ]; $url = $GLOBALS['oauth2_url'] . '?' . http_build_query($url_data); // URL для отправки на сервер авторизации header('Location:' . $url); // exit; }
После перехода на сервер авторизации, вводим Логин и Пароль. И если он правильный, то сервер возвращает на страницу редиректа