Django: захват маркера авторизации из другой службы

#python #django #authentication

Вопрос:

Я пытаюсь захватить токен аутентификации у другого аутентификатора службы. Таким образом, у меня есть форма входа в систему, которая обслуживает клиента с двумя вариантами входа: ввести обычный логин или ссылку на вторую службу проверки подлинности, которая перенаправит на определенную страницу формы. Как только пользователь будет подписан, эта вторая служба аутентификации перенаправит его обратно в мое приложение с токеном в качестве параметра.

Я хотел бы включить в свое приложение своего рода прослушиватель (небольшой скрипт), чтобы, когда произойдет это перенаправление, я мог захватить и проверить токен, наконец, аутентифицировать пользователя в локальном приложении django.

Комментарии:

1. Это называется неявным потоком . Вы должны настроить веб-крючок в своем приложении, и, по вашему мнению, вы должны записать параметры запроса, получить маркер авторизации и проверить его. Если все в порядке, перенаправьте на другое представление и сохраните токен в сеансе пользователя. Если нет, прервите запрос и перенаправьте на просмотр входа в систему.

2. Круто @ChihebNexus! Не знал этого имени! Сейчас гораздо лучше искать примеры! Спасибо вам за совет. Я постараюсь это сделать!

3. Мне нужно было бы перехватить запрос к моему приложению с внешнего сервера (в чем я сильно сомневаюсь, как это сделать в django, промежуточном программном обеспечении, javascript в интерфейсе?), потому что это не происходит автоматически. Мое приложение прослушивает 8000 портов. Сразу после аутентификации по этой внешней ссылке происходит перенаправление на приложение, например myapp.com/?token=XXXX. Я просто запутался в трафике за пределами двух серверов и в правильном способе его реализации в системе django ecossystem

Ответ №1:

Я просто нашел простое решение, так как искал автоматическую запись запроса. Таким образом, учитывая, что внешний сервер аутентификации перенаправляет на предварительно сформированный URL-адрес сразу после аутентификации, этот URL-адрес может быть записан в моем приложении localhost путем редактирования /etc/hosts И nginx.conf (как предлагается здесь), а не только один или другой. Итак, первый:

 127.0.0.1 url-redirect-by-external-server.com
 

и nginx.conf я добавил в файл новые server свойства:

 ...

server {
    listen 80;  
    listen 443;
    server_name url-redirect-by-external-server.com;
    
    location / {
        proxy_pass http://127.0.0.1:8000/myapp/exact-name-of-the-method-in-view-to-handle-the-request/;
    }    
}
...
 

Дело в том, что когда запрос выполняется внешним сервером, приложение все равно не захватывает. Когда я нажимаю Enter на URL-адрес, все работает нормально. Все еще не понимал, что нужно установить.