使用外部Json Web Token验证Django-Website

时间:2018-06-10 18:15:08

标签: django django-rest-framework jwt

我有以下设置:

  • 运行Django前端网页的Apache Webserver
  • 运行Django REST Framework的Application Server

我现在必须将Django前端集成到用java和angular编写的第三方项目中。身份验证完全由第三方处理。

用户通过LDAP登录并创建JWT令牌。

是否可以简单地在Django中接收令牌并在成功解码令牌后验证用户?当我有受保护的函数时,如何使用@login_required装饰器?

是否存在某种我可以指导的项目,或者我是否必须自己编写?

1 个答案:

答案 0 :(得分:0)

我使用内置的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', {})