2024-03-14 10:25:32 +00:00
|
|
|
|
import logging
|
2024-03-20 12:25:07 +00:00
|
|
|
|
from django.http import HttpResponse
|
|
|
|
|
from django.views.decorators.http import require_http_methods
|
2024-03-05 11:23:18 +00:00
|
|
|
|
from django.shortcuts import redirect
|
2024-03-14 10:25:32 +00:00
|
|
|
|
from django.conf import settings
|
2024-03-05 11:23:18 +00:00
|
|
|
|
from keycloak import KeycloakOpenID
|
2024-03-14 10:25:32 +00:00
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
2024-03-20 12:25:07 +00:00
|
|
|
|
|
|
|
|
|
def keycloak_login(request):
|
|
|
|
|
# Инициализация клиента Keycloak с конфигурационными данными из настроек Django.
|
2024-03-05 11:23:18 +00:00
|
|
|
|
keycloak_openid = KeycloakOpenID(
|
|
|
|
|
server_url=settings.KEYCLOAK_CONFIG['SERVER_URL'],
|
|
|
|
|
client_id=settings.KEYCLOAK_CONFIG['CLIENT_ID'],
|
|
|
|
|
realm_name=settings.KEYCLOAK_CONFIG['REALM'],
|
|
|
|
|
client_secret_key=settings.KEYCLOAK_CONFIG['CLIENT_SECRET']
|
|
|
|
|
)
|
|
|
|
|
|
2024-03-20 12:25:07 +00:00
|
|
|
|
# Установка URL для перенаправления пользователя после аутентификации в Keycloak.
|
2024-03-14 10:25:32 +00:00
|
|
|
|
redirect_uri = settings.KEYCLOAK_CONFIG['CALLBACK_URL']
|
2024-03-20 12:25:07 +00:00
|
|
|
|
# Получение URL для аутентификации пользователя через Keycloak.
|
2024-03-14 10:25:32 +00:00
|
|
|
|
auth_url = keycloak_openid.auth_url(redirect_uri=redirect_uri)
|
2024-03-20 12:25:07 +00:00
|
|
|
|
# Логгирование успешной обработки запроса.
|
2024-03-14 10:25:32 +00:00
|
|
|
|
logger.info('Запрос успешно обработан')
|
2024-03-20 12:25:07 +00:00
|
|
|
|
# Перенаправление пользователя на страницу аутентификации Keycloak.
|
2024-03-14 10:25:32 +00:00
|
|
|
|
return redirect(auth_url)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@require_http_methods(["GET"])
|
|
|
|
|
def keycloak_redirect(request):
|
2024-03-20 12:25:07 +00:00
|
|
|
|
# Извлечение кода авторизации из параметров запроса.
|
2024-03-14 10:25:32 +00:00
|
|
|
|
authorization_code = request.GET.get('code')
|
|
|
|
|
|
|
|
|
|
if authorization_code:
|
2024-03-20 12:25:07 +00:00
|
|
|
|
# Если код авторизации получен, продолжается процесс обмена токенами.
|
2024-03-14 10:25:32 +00:00
|
|
|
|
print(authorization_code)
|
|
|
|
|
logger.info(' 2 Запрос успешно обработан')
|
|
|
|
|
return HttpResponse("Authorization code received.")
|
|
|
|
|
else:
|
2024-03-20 12:25:07 +00:00
|
|
|
|
# Если код авторизации отсутствует, возвращается ошибка.
|
|
|
|
|
return HttpResponse("Authorization code not found.", status=400)
|
|
|
|
|
|
|
|
|
|
|