【问题标题】:Authenticating Django-Website with external Json Web Token使用外部 Json Web 令牌对 Django 网站进行身份验证
【发布时间】:2018-11-20 01:16:59
【问题描述】:
我有以下设置:
- 运行 Django 前端网页的 Apache 网络服务器
- 运行 Django REST 框架的应用服务器
我现在必须将 Django 前端集成到一个用 java 和 angular 编写的第 3 方项目中。身份验证完全由该第 3 方处理。
用户通过 LDAP 登录并创建 JWT 令牌。
是否可以在成功解码令牌后简单地在 Django 中接收令牌并验证用户?当我有受保护的函数时,这将如何与 @login_required 装饰器一起工作?
有什么项目我可以定位,还是我必须自己写?
【问题讨论】:
标签:
django
django-rest-framework
jwt
【解决方案1】:
我使用内置的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', {})