Авторизация токена доступа для нескольких устройств в django-allauth

Я использую django-allauth и django-rest-auth для серверной части мобильного приложения iOS. Я новичок в Django Rest Framework и в частности в упомянутых. Они отлично подходят для авторизации на основе токенов доступа. Как вы знаете, когда после успешного входа в систему пользователь получает токен доступа, а при выходе из системы токен доступа удаляется. Но в случае нескольких устройств я предполагаю, что пользователь выйдет из системы со всех устройств. Есть ли способ создать токен доступа для каждого устройства и использовать эти токены доступа для авторизации?


person gorros    schedule 25.12.2014    source источник


Ответы (1)


Когда вы имеете дело с аутентификацией между вашим собственным API, вашим клиентом и сторонним API, вы никогда не захотите предоставлять своим клиентам токен для стороннего приложения. Я рассматривал это в прошлом в Stack Overflow для python-social-auth, который я также рекомендую посмотреть для django-allauth .

Вы сказали, что используете django-rest-auth, который поддерживает один токен для каждого пользователя, который используется несколькими клиентами. Это очень похоже на TokenAuthentication, который предоставляет Django REST Framework, и имеет многие из тех же недостатков. Поскольку все клиенты используют один и тот же токен проверки подлинности для пользователя, это повлияет на всех клиентов, если по какой-либо причине необходимо отозвать токен. Хуже того, django-rest-auth позволяет пользователям явно "выходить из системы", что немедленно аннулирует токен для всех. Это хорошо работает, если только один или два клиента будут использовать ваш API, и они могут справиться с загадочным исчезновением токенов, но это не работает для чего-то большего. Он также не поддерживает несколько токенов для пользователей, что вы ищете.

Обычно я рекомендую для API использовать аутентификацию на основе токенов, например OAuth, а django-oauth-toolkit обычно рекомендуется для Django REST Framework. Это позволит вам по существу проксировать запросы между третьей стороной и вашим клиентом, сохраняя при этом токены для пользователей, уникальные для клиента. Поскольку токены уникальны для клиента, вам не нужно беспокоиться об отзыве или истечении срока действия токена для одного клиента, что повлияет на другого клиента, поскольку токены будут независимы друг от друга.

OAuth используется многими «громкими именами», такими как Stack Exchange, Google и Facebook. Хотя он напрямую не поддерживает концепцию «выхода из системы», обычно рекомендуется создавать собственные страницы для пользователей вашего приложения, чтобы отзывать токены для приложений, чтобы они могли контролировать, кто может и не может получить доступ к API на их имени.

person Kevin Brown    schedule 25.12.2014
comment
Привет, Кевин, спасибо за ответ. Но как этот подход помогает решить проблему с несколькими устройствами? - person gorros; 26.12.2014
comment
Я изучил django-oauth-toolkit, но это не то, что мне действительно нужно. Я не собираюсь заниматься клиентскими приложениями, мой бэкенд только для нативного iOS-приложения. У меня та же проблема, что описана здесь TokenAuthentication. пользователь? - person gorros; 29.12.2014