Обеспечение безопасной и бесперебойной аутентификации пользователей имеет первостепенное значение в современном быстро меняющемся ландшафте веб-приложений.
Среди множества доступных методов аутентификации GitHub OAuth стал полезным инструментом для улучшения процесса входа пользователей в систему при одновременном усилении мер безопасности.
Django, веб-фреймворк на Python, в последнее время завоевал популярность в веб-разработке благодаря своей эффективности и универсальности. Добавление GitHub OAuth в ваши проекты на Django помогает улучшить процесс аутентификации.
Разработчики Django могут использовать GitHub OAuth для доступа к профилю пользователя на GitHub и (при наличии разрешения) к его репозиториям, чтобы персонализировать работу пользователей и адаптировать сервисы приложений.
В этой статье мы расскажем вам о том, как внедрить GitHub OAuth. По ходу работы вы увидите преимущества ваших проектов на Django. Используя эту технологию, вы можете обеспечить пользователям беспрепятственный вход в систему, соблюдая при этом строгие стандарты безопасности.
Предварительные требования
Если вы хотите следовать этому руководству, вам необходимо иметь общее представление об этих инструментах или установить их на свой компьютер:
Как создать приложение GitHub OAuth
Чтобы создать приложение GitHub OAuth, вы должны войти в свою учетную запись на GitHub.
Сначала войдите в свою учетную запись на GitHub, нажмите на фотографию своего профиля на GitHub и выберите "Настройки".
Войдите на GitHub и выберите "Настройки" в боковом меню
Затем, как только откроется новая страница, прокрутите ее до конца и выберите "Настройки разработчика".
Прокрутите страницу до самого низа и выберите "Разработать настройки"
Выберите приложения OAuth и нажмите на Новое приложение OAuth.
Создание нового приложения OAuth
Определите свое приложение OAuth, присвоив ему имя.
- URL-адрес домашней страницы должен быть URL-адресом, ведущим на главную страницу вашего веб-сайта.
- URL-адресом обратного вызова для авторизации должен быть сайт или страница, которую пользователи просматривают после аутентификации своей учетной записи на GitHub.
Как только вы закончите его определять, нажмите кнопку Зарегистрировать приложение.
Зарегистрируйте свою заявку после того, как вся информация будет заполнена
Далее вам понадобятся секрет клиента и ключ-идентификатор клиента для доступа к вашему приложению GitHub OAuth в вашем проекте Django.
Идентификатор клиента уже определен при создании приложения. Нажмите Создать новый секрет клиента, чтобы создать секретный ключ клиента.
Создание секретного ключа клиента
Вам может быть предложено войти в систему. Сделайте это, чтобы продолжить.
Войдите в систему, чтобы продолжить
Как только вы войдете в систему, будет сгенерирован секретный ключ вашего клиента. Скопируйте и сохраните его в свой env-файл.
Скопируйте свой секретный ключ в свой env-файл
Теперь, когда вы настроили свое приложение GitHub OAuth, давайте подключим его к вашему проекту Django.
Как интегрировать GitHub OAuth с Django
В этой части мы свяжем приложение GitHub OAuth вашего проекта Django с ним, используя пакет приложений для социальной авторизации.
Сначала установите пакет dj-rest-auth и определите его на своем settings.py.
pip install dj-rest-auth
Затем настройте пакет dj-rest-auth на своем settings.py.
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"django.contrib.sites",
"rest_framework",
"rest_framework.authtoken",
"dj_rest_auth",
"allauth",
"allauth.account",
"allauth.socialaccount",
"allauth.socialaccount.providers.github",
"oauth2_provider",
"users",
]
Вам нужно будет включить классы аутентификации для dj-rest-auth, обновив REST_FRAMEWORK и AUTHENTICATION_BACKENDS в вашем settings.py.
При желании вы можете настроить allauth
, если собираетесь использовать шаблоны. Сделайте это в своем settings.py файле.
AUTHENTICATION_BACKENDS = ("allauth.account.auth_backends.AuthenticationBackend",)
REST_USE_JWT = True # Use JWT for authentication with dj-rest-auth
SITE_ID = 1 #Set site ID
SITE_ID = 1 # Set the site ID
# Disable email verification for simplicity
ACCOUNT_EMAIL_VERIFICATION = "none"
LOGIN_REDIRECT_URL = "/" # Redirect URL after successful login
LOGOUT_REDIRECT_URL = "/" # Redirect URL after logout
SOCIALACCOUNT_PROVIDERS = {
"github": {
"APP": {
"client_id": "YOUR_GITHUB_CLIENT_ID",
"secret": "YOUR_GITHUB_SECRET_KEY",
"key": "",
"redirect_uri": "http://localhost:8000/accounts/github/login/callback/",
}
}
}
Для этого руководства требуется приложение Django. Давайте назовем его users. Перейдите к представлениям приложения Django и задайте следующий код:
from allauth.socialaccount.providers.github.views import GitHubOAuth2Adapter
from allauth.socialaccount.providers.oauth2.client import OAuth2Client
from dj_rest_auth.registration.views import SocialLoginView
class GitHubLogin(SocialLoginView):
adapter_class = GitHubOAuth2Adapter
callback_url = CALLBACK_URL_YOU_SET_ON_GITHUB
client_class = OAuth2Client
# Define the urls.py on the Django app
urlpatterns += [
path('github/', GitHubLogin.as_view(), name='github_login')
]
Как настроить новое приложение
Чтобы указать учетные данные GitHub OAuth, вам необходимо войти в модель социального приложения Django. Это обеспечит вашему проекту Django дополнительную степень защиты. Благодаря этому изменить учетные данные OAuth будет просто и не повредит существующему коду.
Для начала войдите в систему администратора Django, нажмите "Социальные приложения" и выберите "Добавить приложение". После этого вам будет предложено создать новое приложение.
В Django admin выберите "Социальные приложения"
Вам будет предложено ввести информацию на новой странице.
- Выберите GitHub в качестве поставщика.
- Дайте название своему социальному приложению.
- Введите секрет клиента и идентификатор клиента, созданные в вашем приложении GitHub OAuth.
- Выберите сайт из списка доступных сайтов и переместите его на выбранные сайты. После этого нажмите Сохранить. После этого будет создано новое приложение.
Создание/добавление социального приложения
Измените домен вашего сайта на localhost, поскольку он все еще находится на стадии разработки.
Выберите "Сайт", чтобы изменить существующий домен сайта
Выберите example.com и измените его на http://127.0.0.1:8000/ затем сохраните.
Измените домен вашего сайта с example.com на http://127.0.0.1:8000/
Как протестировать определенное социальное приложение
Как только вы закончите определять и настраивать приложение social Django в своем проекте, вам нужно будет протестировать его и убедиться, что оно работает.
Если вы откроете маршрут http://127.0.0.1:8000/auth/github/, вам потребуется ввести некоторую информацию, такую как токен доступа, идентификационный токен и код.
Мы получим эту информацию вручную, поскольку интерфейс предназначен для получения и анализа этой информации.
Перейдите на страницу регистрации на GitHub, чтобы протестировать определенное социальное приложение
Для этого перейдите по ссылке https://github.com/settings/apps и выберите Токены личного доступа, затем выберите Создать новый токен. Используйте второй вариант, сгенерируйте новый токен (классический), поскольку это руководство предназначено для аутентификации пользователей только для получения их пользовательской информации на GitHub.
В настройках GitHub выберите "Токены личного доступа", затем "Сгенерировать новый токен".
Присвойте токену имя и выберите области действия. Убедитесь, что вы проверили все пользовательские области действия. Затем создайте новый токен.
Определите свой новый токен
Ваш новый токен должен выглядеть следующим образом. Убедитесь, что вы храните его в надежном месте.
Скопируйте созданный персональный токен доступа, сгенерированный GitHub.
Перейдите по ссылке http://127.0.0.1:8000/auth/github/. Введите сгенерированный токен доступа и вуаля! Ваш токен доступа пользователя и имя пользователя на GitHub будут отправлены в качестве ответа в теле письма.
Используя свой токен и имя пользователя на GitHub, убедитесь, что серверная система работает
Как реализовать процесс аутентификации OAuth
Вы успешно установили и протестировали пакет dj-rest-auth. Далее вы узнаете, как протестировать поток OAuth и как он получает пользовательские данные с GitHub.
Чтобы протестировать процесс аутентификации OAuth на GitHub, вам нужно отправить запрос по адресу https://github.com/login/oauth/authorize.
Вы можете сделать это либо с помощью curl:
"https://github.com/login/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=http://127.0.0.1:8000/auth/callback/&scope=user"
(и убедитесь, что вы используете тот же URI перенаправления, который определен в вашем приложении OAuth на GitHub) или откройте https://github.com/login/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=http://127.0.0.1:8000/auth/callback/&scope=user в вашем браузере. Это перенаправит вас на страницу авторизации.
Отправьте запрос в поток аутентификации OAuth на GitHub
Нажмите Авторизовать СВОЕ ИМЯ ПОЛЬЗОВАТЕЛЯ, чтобы авторизовать пользователя.
Нажмите "Авторизоваться", чтобы авторизовать своего пользователя на GitHub
Вы будете перенаправлены на URL-адрес, содержащий код. С помощью кода вы можете сгенерировать токен доступа, необходимый для аутентификации пользователя.
Используйте код с GitHub, чтобы сгенерировать токен доступа для вашей авторизации
Чтобы получить токен доступа, отправьте запрос по этому адресу: https://github.com/login/oauth/access_token?client_id=ВАШ_КЛИЕНТСКИЙ ИДЕНТИФИКАТОР&client_secret=ВАШ_КЛИЕНТСКИЙ СЕКРЕТНЫЙ код&code=КОД
Или вы можете использовать curl для отправки запроса.
"https://github.com/login/oauth/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=CODE"
Это должно либо загрузить токен доступа для вас, либо вернуть его в виде текста ответа, в зависимости от того, как вы его определили. Ответ должен выглядеть следующим образом:
Ваш ответ от вашей серверной системы аутентификации
Теперь, с помощью этого токена, вы можете аутентифицировать своего пользователя, когда он отправляет любой запрос.
Заключение
В заключение, настройка GitHub OAuth на Django - это полезный способ позволить пользователям входить в ваши веб-приложения, используя свои учетные данные на GitHub.
Следуя этому руководству, вы можете повысить безопасность вашего приложения и получить доступ к данным ваших пользователей, что улучшит удобство работы с вашим приложением Django.