CAS python 客戶端登入分析

2021-07-23 04:28:23 字數 3047 閱讀 1359

一。通過url配置讓訪問請求轉到cas驗證:

url(r』^login/$』, cas.views.login』cas.views.login』, name=』login』),

二。cas.views.login 方法有兩方面的作用

1.若請求中沒有攜帶ticket,則轉到 cas login url

2.若請求中帶了ticket,則驗證cas ticket的有效性

對於第一種情況,請求中沒有攜帶ticket:

會拼湊出向cas傳送登入請求的url:

cas端處理完請求後會返回ticket,然後在根據請求中的service返回到之前請求的url,然後到第2點

這裡,我著重在第2點講述:

若請求中攜帶了ticket,則會驗證ticket的有效性,並對user進行鑑權

如原始碼:

在cas.views.login方法中:

if ticket:

user = auth.authenticate(ticket=ticket, service=service)

這個auth.authenticate方法會呼叫在settings中配置的backend

authentication_backends = (

'cas.backends.casbackend',

)

如原始碼:

def

authenticate

(**credentials):

""" if the given credentials are valid, return a user object.

"""for backend, backend_path in _get_backends(return_tuples=true):

try:

inspect.getcallargs(backend.authenticate, **credentials)

except typeerror:

# this backend doesn't accept these credentials as arguments. try the next one.

continue

try:

user = backend.authenticate(**credentials)

…略…

接下來的工作便交給到casbackend.authenticate的方法對ticke進行驗證

這個方法最終會呼叫_internal_verify_cas(ticket, service, suffix)這個方法

casbackend.authenticate方法是基於xml驗證cas 2.0 和 cas 3.0版本 ticket的,驗證成功會返回乙個username,驗證失敗則返回failure

驗證方式:

_internal_verify_cas方法通過拼湊url方式拼湊乙個url向cas伺服器傳送乙個請求,該請求會返回乙個帶有xml格式資料的驗證資訊的jsp頁面(若驗證成功,xml裡會包含username節點的資料)

拼湊的url:url = (urljoin(settings.cas_server_url, suffix) + '?' + urlencode(params))

def

_internal_verify_cas

(ticket, service, suffix):

"""verifies cas 2.0 and 3.0 xml-based authentication ticket.

returns username on success and none on failure.

"""params =

if settings.cas_proxy_callback:

params['pgturl'] = settings.cas_proxy_callback

url = (urljoin(settings.cas_server_url, suffix) + '?' +

urlencode(params))

page = urlopen(url)

username = none

try:

response = page.read()

tree = elementtree.fromstring(response)

document = minidom.parsestring(response)

if tree[0].tag.endswith('authenticationsuccess'):

if settings.cas_response_callbacks:

cas_response_callbacks(tree)

username = tree[0][0].text

…略…else:

failure = document.getelementsbytagname('cas:authenticationfailure')

if failure:

logger.warn('authentication failed from cas server: %s',

failure[0].firstchild.nodevalue)

至此,若驗證成功,則可以將username返回

username返回到casbackend.authenticate方法:username = _verify(ticket, service)

獲得這個username會做判斷:

1. 若已存在這個username的user,則查詢出來返回這個user

2. 若不存在這個username的user,則建立這個user並返回

到此時,便驗證成功了

谷歌遊戲客戶端登入

谷歌遊戲客戶端登入api 2 匯入basicsamples專案。該專案包括 typeanumber和其他android遊戲樣本。3 4 在typeanumber模組中,開啟androidmanifest.xml並將包名稱更改 com.google.example.games.tanc為您自己的不同包...

客戶端自動登入實現

我們在做手機客戶端的時候,登入成功了之後,需要把賬戶資訊儲存下來。下次開啟就沒必要再進入登入介面了,而應該實現自動登入,讓使用者直接進入資料展示主介面。大致思路如下 1 在登入的模組中,如果登入成功,那麼就會有成功後的執行方法,我們在此方法中把賬戶資訊,如userid,username,passwo...

瘦客戶端 胖客戶端 智慧型客戶端

胖客戶端模式將應用程式處理分成了兩部分 由使用者的桌面計算機執行的處理和最適合乙個集中的伺服器執行的處理。乙個典型的胖客戶端包含乙個或多個在使用者的pc上執行的應用程式,使用者可以檢視並運算元據 處理一些或所有的業務規則 同時提供乙個豐富的使用者介面做出響應。伺服器負責管理對資料的訪問並負責執行一些...