diff --git a/note_kfet/fixtures/initial.json b/note_kfet/fixtures/initial.json
index 085016060129282389a44770095c87fd3889a874..1b7799807cb835ced23a44adf79ee72dfdeae398 100644
--- a/note_kfet/fixtures/initial.json
+++ b/note_kfet/fixtures/initial.json
@@ -6,5 +6,14 @@
             "domain": "localhost",
             "name": "La Note Kfet \ud83c\udf7b"
         }
+    },
+    {
+        "model": "cas_server.servicepattern",
+        "pk": 1,
+        "fields": {
+            "pos": 1,
+            "pattern": ".*",
+            "name": "REPLACEME"
+        }
     }
 ]
\ No newline at end of file
diff --git a/note_kfet/settings/base.py b/note_kfet/settings/base.py
index d46ffbe22defc3ceae0be0344fd49eb0ef338d05..39b4124b78d680e8dacc5bce379ef3189ebdb4de 100644
--- a/note_kfet/settings/base.py
+++ b/note_kfet/settings/base.py
@@ -55,6 +55,9 @@ INSTALLED_APPS = [
     # Autocomplete
     'dal',
     'dal_select2',
+    # CAS
+    'cas_server',
+    'cas',
 
     # Note apps
     'activity',
@@ -76,6 +79,7 @@ MIDDLEWARE = [
     'django.middleware.locale.LocaleMiddleware',
     'django.contrib.sites.middleware.CurrentSiteMiddleware',
     'note_kfet.middlewares.TurbolinksMiddleware',
+    'cas.middleware.CASMiddleware',
 ]
 
 ROOT_URLCONF = 'note_kfet.urls'
@@ -128,6 +132,7 @@ PASSWORD_HASHERS = [
 AUTHENTICATION_BACKENDS = (
     'django.contrib.auth.backends.ModelBackend',  # this is default
     'guardian.backends.ObjectPermissionBackend',
+    'cas.backends.CASBackend',
 )
 
 REST_FRAMEWORK = {
@@ -188,3 +193,8 @@ STATIC_URL = '/static/'
 
 ALIAS_VALIDATOR_REGEX = r''
 
+# CAS Settings
+CAS_AUTO_CREATE_USER = False
+CAS_LOGO_URL = "/static/img/Saperlistpopette.png"
+CAS_FAVICON_URL = "/static/favicon/favicon-32x32.png"
+
diff --git a/note_kfet/settings/development.py b/note_kfet/settings/development.py
index 60055ee21d8ff5c43ce09b64a30ecb3a1fd7f374..ad2cd2f1028d10e3fd2044e19f0e153c487e5832 100644
--- a/note_kfet/settings/development.py
+++ b/note_kfet/settings/development.py
@@ -48,3 +48,7 @@ CSRF_COOKIE_SECURE = False
 CSRF_COOKIE_HTTPONLY = False
 X_FRAME_OPTIONS = 'DENY'
 SESSION_COOKIE_AGE = 60 * 60 * 3
+
+# CAS Client settings
+# Can be modified in secrets.py
+CAS_SERVER_URL = "https://note.comby.xyz/cas/"
diff --git a/note_kfet/settings/production.py b/note_kfet/settings/production.py
index 296c17a4948f1e48ddcca3eb3ffae39ebdaef2ec..353d7b8a39f8a844c60f7376f30586508b6882e7 100644
--- a/note_kfet/settings/production.py
+++ b/note_kfet/settings/production.py
@@ -47,3 +47,6 @@ CSRF_COOKIE_SECURE = False
 CSRF_COOKIE_HTTPONLY = False
 X_FRAME_OPTIONS = 'DENY'
 SESSION_COOKIE_AGE = 60 * 60 * 3
+
+# CAS Client settings
+CAS_SERVER_URL = "https://note.crans.org/cas/"
diff --git a/note_kfet/urls.py b/note_kfet/urls.py
index 303e229aaed0ea291620383ce71e7c27fecbf410..ce2c745a3c87dd5939f08d913f16cc267eb47f88 100644
--- a/note_kfet/urls.py
+++ b/note_kfet/urls.py
@@ -1,6 +1,7 @@
 # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
 # SPDX-License-Identifier: GPL-3.0-or-later
 
+from cas import views as cas_views
 from django.contrib import admin
 from django.urls import path, include
 from django.views.generic import RedirectView
@@ -12,6 +13,10 @@ urlpatterns = [
     # Include project routers
     path('note/', include('note.urls')),
 
+    # Include CAS Client routers
+    path('accounts/login/', cas_views.login, name='login'),
+    path('accounts/logout/', cas_views.logout, name='logout'),
+
     # Include Django Contrib and Core routers
     path('i18n/', include('django.conf.urls.i18n')),
     path('accounts/', include('member.urls')),
@@ -19,6 +24,9 @@ urlpatterns = [
     path('admin/doc/', include('django.contrib.admindocs.urls')),
     path('admin/', admin.site.urls),
 
+    # Include CAS Server routers
+    path('cas/', include('cas_server.urls', namespace="cas_server")),
+
     # Include Django REST API
     path('api/', include('api.urls')),
 ]
diff --git a/requirements.txt b/requirements.txt
index 21c24808b0f562f2b0f71ea19a1ed1d2193b7b89..244690bce5b0be99a6d4867dbd64267f086ec9c1 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,6 +4,8 @@ defusedxml==0.6.0
 Django~=2.2
 django-allauth==0.39.1
 django-autocomplete-light==3.5.1
+django-cas-client==1.5.3
+django-cas-server==1.1.0
 django-crispy-forms==1.7.2
 django-extensions==2.1.9
 django-filter==2.2.0
diff --git a/static/img/Saperlistpopette.png b/static/img/Saperlistpopette.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b351fb6c1a93365aa424e5c32d778e0f2763c00
Binary files /dev/null and b/static/img/Saperlistpopette.png differ