使用 django 会话身份验证通过 angular4 应用程序实施中央身份验证系统
Implementing Central Authentication System with angular4 apps using django session authentication
我有三个不同的 django 项目,ProjectA
、ProjectB
和 ProjectC
。 ProjectA
是 django 网站,但其他两个只是基于 django-rest-framework
api 的项目,并且有 angular4
应用程序使用这些 api 各自的项目。
现在我需要结合他们的用户和一些其他功能,需要放入 ProjectA
。因此,如果用户登录 ProjectA
,并访问 ProjectB
或 ProjectC
的 angular 应用程序,则用户应该已经登录。
所以可以肯定我需要 SSO,而且我需要用会话身份验证替换 angular 应用程序的令牌身份验证,我正在考虑使用中央身份验证系统 CAS
,但我没有不了解 angular4
应用程序将如何与 django
一起使用其会话身份验证并使用其 api。因为现在所有三个项目和那两个 angular 应用程序都部署在不同的域或子域中。
你能帮忙吗?另外请评论任何安全漏洞或其他问题
Angular
个应用程序可以放在 django
个应用程序后面。因此用户只能在 he/she 登录时加载应用程序。否则用户将被重定向到 CAS
登录页面。以下是使用 django rest 框架实现 CAS
会话身份验证所需要做的事情的列表。
1. 你需要制作angular dist 放在项目的某处,把路径添加到STATICFILES_DIRS
和TEMPLATE
在 settings.py.
STATICFILES_DIRS = [
"frontend/dist/",
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'frontend/dist/'
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
2. 运行 collectstatic
命令为了收集所有js bundles
.
python manage.py collectstatic
3. 您还需要编辑 dist 文件夹中的 index.html
文件以支持 django 静态文件。我正在发布我的。
<!doctype html>
{% load static %}
<html>
<head>
<meta charset="utf-8">
<title>Blank</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<my-root></my-root>
<script type="text/javascript" src="{% static 'runtime.js' %}"></script>
<script type="text/javascript" src="{% static 'polyfills.js' %}"></script>
<script type="text/javascript" src="{% static 'styles.js' %}"></script>
<script type="text/javascript" src="{% static 'vendor.js' %}"></script>
<script type="text/javascript" src="{% static 'main.js' %}"></script>
</body>
</html>
4. 最后一步是 url 配置。所以你需要使用 login_required
装饰器和 TemplateView
。
from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth.decorators import login_required
from django.views.generic import TemplateView
import django_cas_ng.views as cas_views
urlpatterns = [
url(r'^$', login_required(TemplateView('index.html').as_view())),
url(r'^api/', include('api.urls')),
url(r'^polls2/', include('polls2.urls')),
url(r'^admin/', admin.site.urls),
url(r'^accounts/login/$', cas_views.login, name='cas_ng_login'),
url(r'^accounts/logout/$', cas_views.logout, name='cas_ng_logout'),
url(r'^accounts/callback/$', cas_views.callback, name='cas_ng_proxy_callback'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
希望这对您有所帮助。
我有三个不同的 django 项目,ProjectA
、ProjectB
和 ProjectC
。 ProjectA
是 django 网站,但其他两个只是基于 django-rest-framework
api 的项目,并且有 angular4
应用程序使用这些 api 各自的项目。
现在我需要结合他们的用户和一些其他功能,需要放入 ProjectA
。因此,如果用户登录 ProjectA
,并访问 ProjectB
或 ProjectC
的 angular 应用程序,则用户应该已经登录。
所以可以肯定我需要 SSO,而且我需要用会话身份验证替换 angular 应用程序的令牌身份验证,我正在考虑使用中央身份验证系统 CAS
,但我没有不了解 angular4
应用程序将如何与 django
一起使用其会话身份验证并使用其 api。因为现在所有三个项目和那两个 angular 应用程序都部署在不同的域或子域中。
你能帮忙吗?另外请评论任何安全漏洞或其他问题
Angular
个应用程序可以放在 django
个应用程序后面。因此用户只能在 he/she 登录时加载应用程序。否则用户将被重定向到 CAS
登录页面。以下是使用 django rest 框架实现 CAS
会话身份验证所需要做的事情的列表。
1. 你需要制作angular dist 放在项目的某处,把路径添加到STATICFILES_DIRS
和TEMPLATE
在 settings.py.
STATICFILES_DIRS = [
"frontend/dist/",
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'frontend/dist/'
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
2. 运行 collectstatic
命令为了收集所有js bundles
.
python manage.py collectstatic
3. 您还需要编辑 dist 文件夹中的 index.html
文件以支持 django 静态文件。我正在发布我的。
<!doctype html>
{% load static %}
<html>
<head>
<meta charset="utf-8">
<title>Blank</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<my-root></my-root>
<script type="text/javascript" src="{% static 'runtime.js' %}"></script>
<script type="text/javascript" src="{% static 'polyfills.js' %}"></script>
<script type="text/javascript" src="{% static 'styles.js' %}"></script>
<script type="text/javascript" src="{% static 'vendor.js' %}"></script>
<script type="text/javascript" src="{% static 'main.js' %}"></script>
</body>
</html>
4. 最后一步是 url 配置。所以你需要使用 login_required
装饰器和 TemplateView
。
from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth.decorators import login_required
from django.views.generic import TemplateView
import django_cas_ng.views as cas_views
urlpatterns = [
url(r'^$', login_required(TemplateView('index.html').as_view())),
url(r'^api/', include('api.urls')),
url(r'^polls2/', include('polls2.urls')),
url(r'^admin/', admin.site.urls),
url(r'^accounts/login/$', cas_views.login, name='cas_ng_login'),
url(r'^accounts/logout/$', cas_views.logout, name='cas_ng_logout'),
url(r'^accounts/callback/$', cas_views.callback, name='cas_ng_proxy_callback'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
希望这对您有所帮助。