Аутентификация сайта Django с помощью внешнего веб-токена Json - PullRequest
0 голосов
/ 10 июня 2018

У меня есть следующие настройки:

  • Веб-сервер Apache, на котором работает веб-страница Django Frontend
  • Сервер приложений, работающий на платформе REST Framework Django

У меня сейчас естьинтегрировать интерфейс Django в сторонний проект, написанный на Java и Angular.Аутентификация полностью обрабатывается этой третьей стороной.

Пользователи входят в систему через LDAP и создают токен JWT.

Можно ли просто получить токен в Django и аутентифицировать пользователя после успешного декодирования токена?И как это будет работать с декоратором @login_required, когда у меня есть защищенные функции?

Есть ли какой-нибудь проект, на который я могу ориентироваться, или я должен написать все сам?

1 Ответ

0 голосов
/ 11 июня 2018

Я использую встроенную модель User для хранения имен пользователей.Это позволяет мне войти в систему пользователя после успешной аутентификации, а затем использовать функции Django, такие как @login_requested, как вы обычно их используете.

Ниже приведен пример кода (без кода для аутентификации REST).

from django.contrib import messages
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.views.decorators.cache import never_cache

@never_cache
def user_login(request):
    ''' User login '''

    if request.user.is_authenticated:
        return HttpResponseRedirect(reverse('main:index'))

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # Your code for authentication here
        # authenticate =  .... 

        if authenticate:
            # Get user // create one if it doesn't exist yet
            user, created = User.objects.get_or_create(username=username)
            # Login user - @login_required decorator can be used after user has been logged in
            login(request, user)
            next = request.POST.get('next', '/') if request.POST.get('next') else '/'
            return HttpResponseRedirect(next)
        else:
            messages.warning(request, 'Authentication failed', extra_tags=forgot_password)
            return HttpResponseRedirect(reverse('main:login'))
    else:
        return render(request, 'main/login.html', {})
...