问题描述
我有一个非常有趣的问题。我们使用django rest框架构建了一些api。这些API由使用React设计的前端使用。我们通过会话使用SAML来管理身份验证过程。此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,user):
refresh = RefreshToken.for_user(user)
return {
'refresh': str(refresh),'access': str(refresh.access_token),}
return response
现在,我正在尝试使用djangorestframework-simplejwt。但是由于这里使用了SAML,因此我不确定如何在此处实现JWT。我是否需要通过上述中间件或其他任何方式进行更改?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)