es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Implementación de Django OAuth2 Toolkit: la llamada de autorización devuelve la página HTML de inicio de sesión.

Soy nuevo en el Django OAuth2 Toolkit (y aún relativamente nuevo en Django) y estoy tratando de implementarlo con una API existente (DRF). Hasta ahora, la autorización de la API ha funcionado a través de un token estático que se pasa junto con la solicitud. En el sitio web en sí, los usuarios pueden iniciar sesión y la autenticación de sesión está habilitada.

Instalé el toolkit según las instrucciones y he creado una aplicación de código de autorización con el interruptor ‘omitir autorización’ marcado. Ahora estoy tratando de acceder al servidor de autorización con la siguiente URL (como GET):

http://127.0.0.1:8000/o/authorize/?response_type=code&client_id=client_1&redirect_uri=http://127.0.0.1:8000/trial&code_challenge=WZRHGrsBESr8wYFZ9sx0tPURuZgG2lmzyvWpwXPKz8U&code_challenge_method=S256&scope=read&client_secret=secret_1

Cuando intento llamar a esto (a través de Postman, la API o un navegador), en lugar de obtener el código como se esperaba, obtengo la página de inicio de sesión. No entiendo por qué está sucediendo esto y cómo omitirlo. ¡Cualquier idea o ayuda sería muy apreciada!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el middleware de autenticación de Django está interfiriendo con el proceso de autenticación de OAuth2. Debes asegurarte de que el middleware de autenticación no se aplique a la URL del servidor de autorización (por ejemplo, “/o/authorize/”).

    Para lograr esto, puedes agregar lo siguiente a tu archivo settings.py:

    MIDDLEWARE = [
        # ...
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        # ...
    ]
    
    # Agrega lo siguiente para omitir la autenticación de las URL de OAuth2:
    OAUTH2_PROVIDER = {
        'OAUTH2_BACKEND_CLASS': 'oauth2_provider.oauth2_backends.JSONOAuthLibCore'
    }
    
    AUTHENTICATION_BACKENDS = [
        'django.contrib.auth.backends.ModelBackend',
        'oauth2_provider.backends.OAuth2Backend',
    ]
    

    Con esta configuración, el middleware de autenticación de Django no se aplica a las URL de OAuth2 y el proceso de autenticación de OAuth2 debería funcionar según lo previsto.

Comments are closed.