使用django会话身份验证用angular4应用程序实现中央身份验证系统

使用django会话身份验证用angular4应用程序实现中央身份验证系统,django,angular,django-rest-framework,single-sign-on,cas,Django,Angular,Django Rest Framework,Single Sign On,Cas,我有三个不同的django项目,ProjectA,ProjectB和ProjectCProjectA是django网站,但其他两个仅是基于api的项目,并且有使用这些api的应用程序 现在,我需要将他们的用户和一些其他功能结合起来,并需要将它们放入ProjectA。因此,如果用户登录到ProjectA,并访问ProjectB或ProjectC的angular应用程序,则应认为用户已登录 因此,这是肯定的,我需要SSO,我还需要用会话身份验证替换angular应用程序的令牌身份验证,我正在考虑使用

我有三个不同的django项目,
ProjectA
ProjectB
ProjectC
ProjectA
是django网站,但其他两个仅是基于api的项目,并且有使用这些api的应用程序

现在,我需要将他们的用户和一些其他功能结合起来,并需要将它们放入
ProjectA
。因此,如果用户登录到
ProjectA
,并访问
ProjectB
ProjectC
的angular应用程序,则应认为用户已登录

因此,这是肯定的,我需要SSO,我还需要用会话身份验证替换angular应用程序的令牌身份验证,我正在考虑使用中央身份验证系统
CAS
,但我不明白
angular4
应用程序将如何与
django
一起使用其会话身份验证和使用它的api。因为现在所有三个项目和这两个Angle应用程序都部署在不同的域或子域上


你能帮忙吗。另外,请对任何安全缺陷或某些东西发表评论

Angular
应用程序可以被放置在
django
应用程序后面。所以用户只有在登录后才能加载应用程序。否则,用户将被重定向到
CAS
登录页面。下面列出了使用django rest框架实现
CAS
会话身份验证所需执行的操作

1。您需要创建角度距离并将其放置在项目中的某个位置,将路径添加到settings.py中的
STATICFILES\u DIRS
TEMPLATE

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捆绑包

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>
希望这有帮助

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)