اجرای SSO در پروژه Django

برای برخی از توسعه دهندگان ، SSO ممکن است هنوز هم برای شنیدن در مورد روزانه جدید باشد ، در حالی که این مدتی در آنجا بوده است و ما روزانه از هر وسیله ای که استفاده می کنیم استفاده می کنیم. Google یکی از بزرگترین سازمان است که برای اکثر خدمات به SSO تکیه می کند. SSO در مورد بهبود UX (تجربه کاربر) جنبه مهمی است. بنابراین اکنون سوالی که باید از خود بپرسید این است:
SSO چیست؟
Single Sign-On (SSO) روشی احراز هویت است که به کاربران امکان می دهد تا با یک مجموعه اعتبار ، به چندین برنامه و وب سایت وارد شوند.
مطالعه موردی SSO (Google)
قبل از گفتن یک کلمه در اینجا ، درک کنید که این فقط یک اجرای کم عمق سیستم است ، من دوست دارم این راهی برای شما باشد که بتوانید این موضوع را بهتر درک کنید و بدانید که چگونه می توانید چیزی شبیه به USECase خود را پیاده سازی کنید.
به جهت فلش و خدمات مختلفی که به آن اشاره می کنیم توجه کنید. بدون آزار و اذیت بیشتر ، بیایید این کار را انجام دهیم !!!
اجرای
این آموزش اجرای SSO در Django را با استفاده از Google SSO پوشش می دهد. ما چند کتابخانه خواهیم داشت که به آنها وابسته باشیم و کد بعداً در یک repo github یافت می شود.
- ایجاد پروژه و نصب وابستگی ها
mkdir django_sso
cd django_sso
python -m venv .venv
source .vevn/bin/activate
pip install python-social-auth social-auth-app-django
django-admin startproject django_sso .
python manage.py startapp accounts
touch accounts/urls.py
- پیکربندی تنظیمات
# django_sso/settings.py
INSTALLED_APPS = [
...
'social_django',
]
TEMPLATES = [
#...
'DIRS': [
BASE_DIR / 'templates',
],
#...
]
AUTHENTICATION_BACKENDS = (
'social_core.backends.google.GoogleOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'your-client-id'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'your-client-secret'
LOGIN_URL = 'login'
LOGOUT_URL = 'logout'
LOGIN_REDIRECT_URL = 'home'=
- نمایش ها و تنظیمات URL ها
# accounts/urls.py
from django.urls import path, include
from accounts.views import login_view, logout_view, home_view, generate_sso_token
urlpatterns = [
path('auth/', include('social_django.urls', namespace="social")),
path('login/', login_view, name="login"),
path('logout/', logout_view, name="logout"),
path('home/', home_view, name="home"),
path('generate-sso-token/', generate_sso_token, name="generate_sso_token"),
]
# django_sso/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('accounts.urls')),
]
# accounts/views.py
from django.shortcuts import render, redirect
from django.contrib.auth import logout
from django.contrib.auth.decorators import login_required
from django.utils import timezone
from .models import SSOUserToken
import uuid
def login_view(request):
if request.user.is_authenticated:
return redirect('home')
return render(request, 'login.html')
def logout_view(request):
logout(request)
return redirect('login')
@login_required
def home_view(request):
return render(request, 'home.html')
@login_required
def generate_sso_token(request):
if request.method == 'POST':
user = request.user
expires_at = timezone.now() + timezone.timedelta(hours=1)
token = str(uuid.uuid4())
SSOUserToken.objects.create(
user=user,
token=token,
expires_at=expires_at
)
return render(request, 'sso_token.html', {'token': token})
return redirect('home')
بیایید اکنون نگاهی به پرونده های HTML بیندازیم.
نتایج
نتیجه ممکن است در زمانی که این آموزش را مشاهده می کنید یکسان نباشد ، کد منبع با برخی از سبک های دیگر به روز شده است.
پایان
امیدوارم که از کاردستی Django SSO لذت ببرید و فهمیدید که چه تاثیری در UX دارد. کاردستی مبارک فراموش نکنید که برای اطلاعات بیشتر دنبال کنید. افکار خود را در بخش نظرات رها کنید.