2015-02-04 3 views
16

Django Rest Framework를 기반으로하는 Django 백엔드 API를 사용하는 AngularJS 단일 페이지 응용 프로그램이 있습니다. API는 django-rest-framework-jwt을 통해 보호됩니다. 서버 측 계정 관리 및 인증에 django-allauth을 사용하고 싶습니다.Django-allauth, JWT, Oauth

나는 흐름에서 하나의 조각이 누락되었습니다. 클라이언트의 Oauth-Token은 어떻게 JWT 토큰으로 전송됩니까? 기본적으로, 나는 python-social-auth에 기초하여 여기에 설명 된대로 http://blog.wizer.fr/2013/11/angularjs-facebook-with-a-django-rest-api/을하고 싶습니다.

그럼 내 질문은 무엇입니까? django-allauth으로 링크에서 ObtainAuthToken 클래스를 구현합니까?

+0

이 주제에 대한 전문가가 아니지만 다른 토큰을 기반으로 토큰을 만들어야하는 이유는 무엇입니까? JWT 토큰을 만들려면 다음 라이브러리를 살펴보십시오. https://python-jose.readthedocs.org/en/latest/jwt/api.html – Cheng

+0

@schacki이 문제에 대한 해결책을 찾으십니까? 나는이 문제를 정확히 해결하고 좋은 해결책을 모색하고있다. –

답변

0

우리 회사에서 Oauth를 위해 hello.js를 사용합니다. 파이썬 끝에서 shim을 제공하고 사용자가 소셜 계정을 연결하면 새로 고침 토큰/다른 데이터가 필요합니다. 그런 다음 Django를 통해 Oauth 제공 업체의 페이지에서 해당 페이지로 리디렉션합니다. 각 사용자는 여전히 jwt에 필요한 자신의 이메일 계정을 가지고 있지만 사회 계정의 범위에있는 이메일은 모두 자신의 이메일이라고 추측 할 수 있습니다.

1

(영문 일 수 있음) 일반적으로 소셜 로그인에는 클라이언트 측 ("Javascript SDK")과 서버 측의 두 가지 로그인 흐름이 있습니다. 서버를 인증해야 할 경우 일반적으로 서버 측 흐름을 수행하는 것이 훨씬 쉽습니다. 그리고 그것은 또한 내가 모든 것을 생각하는 것입니다 (그리고 여러분이 언급했던 blogpost와 같은 프론트 엔드 라이브러리를 사용하는 것은 아닙니다).

이제 도전 과제는 서버에서 프론트 엔드로 토큰을 제공하는 것입니다. SPA 초기화의 HTML에 토큰을로드 한 다음 Angular에서 토큰 클라이언트 측 (쿠키, localStorage 등)을 저장하여 새로 고침시 세션이 손실되지 않도록 할 수 있습니다.

사용자가 앱을 떠나지 않게하려면 새 창에서 /accounts/login/ 또는 /accounts/signup/ URL을 열 수 있습니다. 새 창에서 앱을 승인하고 서버는 반환 할 때 토큰을받습니다. 거기에서 generate a JWT token manually을 가져 와서 자바 스크립트가 액세스 할 수 있도록 템플릿에 렌더링합니다. 팝업 창에 js가 있으면 팝업을 연 응용 프로그램과 통신하여 토큰을 전달할 수 있습니다 (예를 들어 SO answer 참조). 그러면 저장할 수 있습니다.

0

Django-allauth는 소셜 로그인 프로세스에 연결할 수있는 신호를 제공합니다. 귀하의 경우 allauth.socialaccount.signals.pre_social_login 신호를 구독하는 것이 좋습니다. 코드는 다음과 같습니다.

from allauth.socialaccount.signals import pre_social_login 

@receiver(pre_social_login) 
def create_jwt_token(sender, request, sociallogin, **kwargs): 
    # dig into the sociallogin object to find the new access token.