Когда использовать OAuth в Django? Какова его точная роль в Django login framework?
Я пытаюсь убедиться в том, что я правильно его понимаю:
Является ли OAuth мостом только для сторонних аутентификаторов, которые так распространены, например, Facebook, Google? И его использование улучшает пользовательский опыт безопасным способом, но не добавляет дополнительный безопасный слой в Django login framework? Или только тип гранта Authorization Code является таким? Могу ли я воспринимать это так?
Заранее спасибо!
Что такое OAuth?
Согласно RFC 6749:
Механизм авторизации OAuth 2.0 позволяет стороннему приложение получить ограниченный доступ к HTTP сервису, либо от имени от имени владельца ресурса, организуя взаимодействие одобрения между владельцем ресурса и HTTP-сервисом, либо позволяя стороннему приложению получить доступ к HTTP-сервису. стороннему приложению получить доступ от своего имени.
По сути, это протокол авторизации , используемый для обмена разрешениями между несколькими приложениями.
Если вы решите реализовать OAuth, то именно ваше приложение позволит другим сервисам программно просматривать данные ваших пользователей и при необходимости действовать от их имени.
Когда приложению требуется доступ к другой службе, которую вы используете, оно, вероятно, использует OAuth для выполнения этих действий. (Например, когда игры просили нас разрешить публикацию в Facebook от нашего имени)
Чем не является OAuth?
Глядя на ваш вопрос, мне кажется, что существует неправильное понимание OAuth.
OAuth не является мостом для сторонних методов аутентификации. Если вы ищете подобный механизм аутентификации, вам стоит обратить внимание на Single Sign-On (SSO). Для Django вы можете использовать django-simple-sso.
Повышает ли это безопасность?
В зависимости от случая использования, да, это может повысить безопасность. Если вашему приложению необходимо обмениваться информацией с другими сервисами, хорошей практикой будет ограничить возможности сторонних сервисов в вашем приложении по функциям и времени.
Допустим, например, что вашему пользователю нужно дать разрешение другому приложению собирать информацию из вашего:
- Если бы вы использовали старомодный метод комбинации электронной почты и пароля, эти учетные данные были бы раскрыты в случае утечки данных стороннего сервиса.
- Использование OAuth, с другой стороны, гораздо более безопасно, так как учетные данные, хранящиеся на сервере, не содержат пароля пользователя и имеют очень специфические роли , помимо того, что они легко отзываются .
Если у вас приложение на Django, я бы сказал, что вам не нужно реализовывать OAuth - вы должны быть в порядке с любой функциональностью входа, которую предлагает Django.
OAuth обычно используется, когда различные службы общаются друг с другом. Это не обязательно должны быть сторонние сервисы, они могут принадлежать одной и той же стороне. Например, когда у вас есть одностраничное приложение или мобильное приложение, которое хочет вызвать ваш внутренний API для получения некоторых данных. Тогда лучше использовать OAuth, поскольку это стандарт, и он помогает вам реализовать авторизацию безопасным способом.
Когда вы думаете о "логине с Google/Facebook", то на самом деле вам нужно решение SSO (Single Sign-On). Это решение очень часто реализуется с помощью OpenID Connect (OIDC), который является протоколом, построенным поверх OAuth. Тем не менее, вы можете использовать только OIDC для регистрации пользователя в Google, получения ID Token, а затем иметь возможность аутентифицировать пользователя в вашем приложении Django на основе ID Token от Google. Для этого вам не нужен OAuth (в том смысле, что вам не нужно получать маркеры доступа от Google, вам не нужен собственный сервер авторизации, и вы можете полагаться на сессии на основе cookie).