2017-03-09 5 views
0

그래서 토큰 기반 인증 마이크로 서비스에 대해 인증을 시도하고 있습니다.저장 및 Django에서 요청 개체를 통해 토큰을 전달하는 방법?

나는 이것이 이상적이지 않다는 것을 알고 있지만, 시작하기 위해 나는이 빠른 미들웨어를 작성했다.

middleware.py

def process_request(self, request): 
    if request.token = None: 
     pass 
    else: 
     username = validate_token(request.token) 
     request.username = username 

views.py

def login(request): 
    form = LoginForm() 

    if request.method == 'POST': 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      my_token = authservice_login(user,pass) 
      request.token = my_token 

누군가가 로그인하고 토큰이 반환되면 내 질문입니다, 어떻게 모든 요청 사이의 지속이 토큰을 유지합니까? 나는 Django 요청 객체에 대해 다소 안개가 낀다고 생각한다. 로그인 한 다음 다른보기가 호출되는 다른 페이지로 이동하면 로그인 할 때 생성 한 request.token에 계속 액세스 할 수 있습니까?

내가 생각하기에 이상적인 것은 미들웨어를 통해 모든 요청에이 토큰을 전달하는 로그인 후입니까?

답변

0

달성하려는 효과에 따라 다릅니다. REST 원칙을 준수하는 데별로 신경 쓰지 않는다면 사용자가 로그인 한 것과 관련된 정보 또는 사용자와 관련된 다른 데이터를 저장하는 데 sessions을 사용할 수 있습니다.

그러나 장고에는 user 개체와 django.contrib.auth 모듈이 있는데, 이는 많은 인증 작업을 수행합니다. 일반적으로 사용자 객체는 자체적으로 지속되므로 토큰을 영구적으로 유지할 필요가 없습니다.

토큰은 REST API와 함께 사용되며 클라이언트가 보안 연결을 통해 요청할 때마다 함께 전송됩니다.

+0

Django에 내장 된 사용자 객체를 무시하고 있습니다. – david

+0

간단히 말해서 토큰을 "보관"하는 방법이 필요합니다. 왜냐하면 토큰은 인증 서비스에 의해서만 생성되고 반환되기 때문에 모든 요청을 통해 토큰을 유지하고 전달해야합니다. – david

+0

Django에 내장 된 사용자 객체를 우회하는 것은 좋은 생각이 아니라고 생각합니다. 많은 일반적인 작업을 재발 명해야합니다. 3d 파티의 인증 서비스는'django.contrib.auth'와 통합 될 수 있습니다. 그럼에도 불구하고 여전히 자신의 방식으로 작업하는 것을 선호하는 경우 세션을 사용하여 토큰을 유지하거나 토큰을 클라이언트에 반환 한 다음 각 요청과 함께 세션을 전달할 수 있습니다. 후자의 두 가지 방법 모두 보안에 특별한주의가 필요합니다. 그러나 이것은 또 다른 주제입니다. 안녕하세요, 마이크로 서비스를 구축하는 경우 http://www.django-rest-framework.org/에주의하시기 바랍니다. – abcdn