詳解Django CAS 解決方案

2022-10-04 15:57:27 字數 2486 閱讀 2364

cas單點登入主要是為了解決主系統和子系統的統一登入問題,能夠做到任意乙個子系統登入成功後,再登入其他子系統後不再需要認證,讓使用者不用重複地進行登入認證。cas單點登入的方案很多,並且大多數都是採用session的方式,而本文結合個人實踐,著重討論django cas token的解決方案。

本方案中,cas客戶端和服務端都採用了開源專案,服務端是django-而客戶端是django-cas-ng。

cas server

服務端相比於客戶端要簡單地多,根據github步驟一步步**和配置就好。

**pip install django-mama-cas

配置# setting

installed_apps = (

'mama_cas',

)# 重要!,service是client的ip,是個陣列,可以在後面新增service的host:port。

mama_cas_services = [

,]# urls.py

url(r'', include('mama_cas.urls')),

client

首先是一些基本的客戶端配置,比如server ip等,但是django-cas-ng預設是通過session的方式認證的,而我們需要通過token的方式認證,所以如果想繼續用django-cas-ng來解決問題,那要麼檢視它是否有原生支援的介面,要麼改原始碼。改原始碼可能不大友好,所以我優先研究了一下django-cas-ng的原生支援,無意中發現view-wrappers-example可以繼承它原生的登入介面做一些封裝,而我們完全通過繼承原生的登入方法,然後加入我們的token相關**。所以urls.py裡面登入的方法我們寫的是我們寫在view.py中封裝的登入方法,而並非預設的。

# settings.py

installed_apps = (

# ... other installed apps

'django_cas_ng',

)authentication_ba = (

'django_cas_ng.backends.casbackend',

)# 注意:這是cas server的位址

cas_server_url = ''

# 存入所有cas 服務端返回的user資料。

cas_apply_attributes_to_user = true

# urls.py

import view import *

url(r'^accounts/login$', cas_login, name='cas_login'),

#view.py

from django_cas_ng import views as baseviews

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt

def cas_login(request, **kwargs):

r = baseviews.login(request, **kwargs)

if not request.user.is_anonymous():

token = get_token(request)

if token:

r.set_cookie('token', token)

else:

print 'get token error'

else:

print('user is anonymous')

return r

def get_token(request, *args, **kwargs):

user = request.user

try:

request_hash = authtoken.get_request_hash(request)

try:

token = generate_token() # function used to geneate token, this place won't show more detail codes

token.refresh()

except indexerror:

pass

except exception as e:

print e

return false

return token.key

生成token的方法我就不詳細描述了,這邊主要提供了乙個思路,我們將django-cas-ng原生的登入方法進行了繼承,然後生成token並放到了session當中。

總結本文主要為cas token方案提供乙個思路,如果整合進已有專案中,肯定會遇到很多細節問題,不過萬變不離其宗,我們首先要熟悉手中運用的工具,然後要善於在此基礎之上根據自己的定製需求進行開發,多看看文件和原始碼,每一次可能都會有新的發現。

refer

使用django-mama-cas快速搭建cas服務

django實現cas+oauth2

本文標題: 詳解django cas 解決方案

本文位址:

mysql 解決方案 Mysql解決方案

mysql解決方案 一 centos7安裝mysql5.7 wget rpm uvh mysql80 community release el7 3.noarch.rpm yum repolist all grep mysql 發現預設mysql8.0是預設安裝的,然而我們要安裝的是mysql5.7...

OSSIM解決方案

大多數主流安全產品針對的是計算機單一安全缺陷,他們更多的是提供某一單獨的安全保護功能。目前安全領域內還沒有一套相對完整系統安全解決方案,而且由於主流商業安全軟體的閉源特性,讓我們對其自身的安全特性也不能夠完全信服。隨著軟體開源趨勢的不斷推進,現在出現了很多甚至可以說效能毫不遜色於任何商業軟體的安全工...

android OOM解決方案

解決oom的常用方案 記憶體限制是android對應用的乙個系統級限制,作為應用層開發人員,沒有辦法徹底去消滅這個限制,但是可以通過一些手段去合理使用記憶體,從而規避這個問題。以下是個人總結的一些常用方法 1 快取影象到記憶體,採用軟引用快取到記憶體,而不是在每次使用的時候都從新載入到記憶體 2 調...