【问题标题】: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', {})
    

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 2018-07-30
      • 2017-06-24
      • 2016-12-17
      • 2015-10-14
      • 2015-06-06
      • 2020-06-23
      • 2018-07-19
      • 2016-10-07
      相关资源
      最近更新 更多