Сессии Django и поток кода авторизации Microsoft OAuth 2.0: какой путь правильный?
В моем веб-приложении я собираю некоторые данные от пользователя и сохраняю их в request.session. Затем мне нужно получить токены доступа/обновления MS Graph. Поэтому я запрашиваю код авторизации. После этого мне нужно вернуться к первоначальным сессиям пользователя.
app_name = 'sua'
urlpatterns = [
path('', WizardView.as_view(), name='main'),
path('cauth', CloudAuthView.as_view(), name='cauth'),
]
class CloudAuthView(View):
def get(self, request):
auth_code = request.GET.get('code', '')
if auth_code:
session_key = request.GET.get('state', '')
s = SessionStore(session_key=session_key)
s['auth_code'] = auth_code
print(f'auth_code: {request.session.session_key}; {request.META.get("HTTP_REFERER")}')
return redirect(reverse('sua:cauth'))
print(f'get: {request.session.session_key}; {request.META.get("HTTP_REFERER")}')
auth_url = _get_auth_url(state=request.session.session_key)
print(auth_url)
return redirect(auth.get_auth_url(state=request.session.session_key))
Журналы:
Starting development server at http://127.0.0.1:43814/
Quit the server with CTRL-BREAK.
[15/Oct/2022 13:30:53] "GET / HTTP/1.1" 200 5528
[15/Oct/2022 13:30:59] "POST / HTTP/1.1" 302 0
get: es52sm9fxogmhwgja3nkgzel2g9declx; http://127.0.0.1:43814/
auth_url: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?redirect_uri=http%3A%2F%2Flocalhost%3A43814%2Fcauth&scope=offline_access+User.Read+Files.Read+User.Read.All+User.ReadWrite.All+Directory.Read.All+Directory.ReadWrite.All+Files.ReadWrite.All+Sites.FullControl.All&response_type=code&state=es52sm9fxogmhwgja3nkgzel2g9declx&client_id=xxx
[15/Oct/2022 13:30:59] "GET /cauth HTTP/1.1" 302 0
auth_code: j92mb1ougcqjhvr50xsfufap1jayru5s; http://127.0.0.1:43814/
[15/Oct/2022 13:31:00] "GET /cauth?code=0.AUIAGvBhs...&state=es52sm9fxogmhwgja3nkgzel2g9declx&session_state=2794f2aa HTTP/1.1" 302 0
get: j92mb1ougcqjhvr50xsfufap1jayru5s; http://127.0.0.1:43814/
[15/Oct/2022 13:31:00] "GET /cauth HTTP/1.1" 302 0
[15/Oct/2022 13:31:00] "GET / HTTP/1.1" 200 5668