Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django rest框架的JWT身份验证_Django_Django Rest Framework_Django Rest Framework Simplejwt - Fatal编程技术网

django rest框架的JWT身份验证

django rest框架的JWT身份验证,django,django-rest-framework,django-rest-framework-simplejwt,Django,Django Rest Framework,Django Rest Framework Simplejwt,我有一个非常有趣的问题。我们已经使用django rest框架构建了两个API。这些API由使用React设计的前端使用。我们使用SAML withe会话来管理身份验证过程。此SAML身份验证由django中间件处理 现在我需要使这些API中的一些可以访问到不同的域,在不同的域中,它们的后端可以通过编程方式调用我们的API。因此,我需要向他们提供身份验证详细信息,以便他们能够访问它 既然这里启用了SAML,那么如何使用JWT设置身份验证并给他们令牌呢 saml中间件代码如下所示 class Sa

我有一个非常有趣的问题。我们已经使用django rest框架构建了两个API。这些API由使用React设计的前端使用。我们使用SAML withe会话来管理身份验证过程。此SAML身份验证由django中间件处理

现在我需要使这些API中的一些可以访问到不同的域,在不同的域中,它们的后端可以通过编程方式调用我们的API。因此,我需要向他们提供身份验证详细信息,以便他们能够访问它

既然这里启用了SAML,那么如何使用JWT设置身份验证并给他们令牌呢

saml中间件代码如下所示

class SamlMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):

        if hasattr(request, 'user') and request.user.is_anonymous and 'samlUserdata' in request.session:

            data = request.session['samlUserdata']['mail'][0]
            if data is not None:
                try:
                    email=data
                    user = User.objects.get(email=email)
                except ObjectDoesNotExist:
                    user = User.objects.create_user(username=data.split("@")[0],
                                                    email=data)
                login(request,user)
                request.session.set_expiry(settings.SESSION_EXPIRY)
        elif not settings.DEBUG and  'samlUserdata' not in request.session \
                and not request.get_full_path().startswith('/admin'):
            if not request.path == settings.REDIRECT_LOGIN_URL and not request.path == REDIRECT_LOGOUT_URL and \
                        not request.path == '/saml':
                        return redirect(settings.REDIRECT_LOGIN_URL)

       response = self.get_response(request)
             
            request.session.set_expiry(settings.SESSION_EXPIRY)
   

       if request.user.is_authenticated:
        tokens=self.__class__.get_tokens_for_user(self,request,request.user)


        request.session.set_expiry(settings.SESSION_EXPIRY)

    return response

@staticmethod
def get_tokens_for_user(self,request,user):
    refresh = RefreshToken.for_user(user)

    return {
        'refresh': str(refresh),
        'access': str(refresh.access_token),
    }    
        return response

现在,我尝试使用Djangorest框架simplejwt。但是由于这里使用SAML,我不确定如何在这里实现JWT。我是否必须在上述中间件或任何其他方式中更改某些内容?

手动创建令牌并将其包含到响应中如何。djangorestframework simplejwt允许您手动创建令牌。rest配置保持原样。@Devious您的意思是在同一中间件中创建一个令牌并作为响应发送。中间件的响应如下所示,
HttpResponseRedirect status\u code=302,“text/html;charset=utf-8”,url=“https://”>
。它基本上告诉浏览器重定向到idp。