【问题标题】: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
      相关资源
      最近更新 更多