import json import logging from django.http import JsonResponse from django.shortcuts import redirect from django.conf import settings from keycloak import KeycloakOpenID from urllib.parse import urlencode, urljoin from django.contrib.auth import logout logger = logging.getLogger(__name__) def keycloak_login(request): 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'] ) redirect_uri = settings.KEYCLOAK_CONFIG['CALLBACK_URL'] auth_url = keycloak_openid.auth_url(redirect_uri=redirect_uri) logger.info('Запрос успешно обработан') return redirect(auth_url) def keycloak_logout(request): logout(request) keycloak_server_url = settings.KEYCLOAK_CONFIG['SERVER_URL'] realm_name = settings.KEYCLOAK_CONFIG['REALM'] redirect_uri = settings.KEYCLOAK_CONFIG['POST_LOGOUT_REDIRECT_URI'] params = {'redirect_uri': redirect_uri} keycloak_logout_url = ( f'{keycloak_server_url}/realms/{realm_name}/protocol/openid-connect/logout' f'?{urlencode(params)}' ) return redirect(keycloak_logout_url) from django.http import HttpResponse from django.views.decorators.http import require_http_methods import logging @require_http_methods(["GET"]) def keycloak_redirect(request): # Extract the authorization code from the query parameters authorization_code = request.GET.get('code') if authorization_code: # Proceed with the token exchange process here print(authorization_code) logger.info(' 2 Запрос успешно обработан') return HttpResponse("Authorization code received.") else: return HttpResponse("Authorization code not found.", status=400)