我想讓三個Drupal網站使用CAS協同工作。所以,其中一個Drupal網站正在使用CAS服務器模塊;但是,當我作爲一個CAS「客戶端」去其他Drupal網站時,我仍然需要按「登錄」才能登錄。Drupal 6 CAS「客戶端」不會自動登錄
CAS「客戶端」是否可以自動檢查?那麼,如果用戶已經登錄,用戶將不必按「登錄」按鈕?而且,如果他們不是,他們可以保持匿名。
我想讓三個Drupal網站使用CAS協同工作。所以,其中一個Drupal網站正在使用CAS服務器模塊;但是,當我作爲一個CAS「客戶端」去其他Drupal網站時,我仍然需要按「登錄」才能登錄。Drupal 6 CAS「客戶端」不會自動登錄
CAS「客戶端」是否可以自動檢查?那麼,如果用戶已經登錄,用戶將不必按「登錄」按鈕?而且,如果他們不是,他們可以保持匿名。
事實證明,這個功能在CAS模塊中工作,但「緩存模式」需要設置爲「禁用」。請參閱issue:http://drupal.org/node/1280474
此外,身份驗證檢查只發生在第一次訪問站點時(直到瀏覽器關閉並重新打開)。見問題:http://drupal.org/node/1405448
好吧,我想通了。它在CAS中被稱爲「the Gateway feature」。
我的困惑是因爲Drupal CAS模塊沒有按照我原先以爲的方式工作。下面是Drupal的CAS模塊的客戶端部分說:
[X]檢查與CAS服務器,以查看用戶是否已經登錄?
這實現了CAS協議的網關功能。
因此,挖掘模塊代碼我能夠找出解決方案。
解決方法:
實現了CAS網關功能的phpCAS功能是:
這裏的代碼片段,我打算使用:
$is_auth = phpCAS::checkAuthentication(); // Returns TRUE or FALSE
if ($is_auth) {
phpCAS::forceAuthentication();
}
else {
// Do nothing until user is ready to authenticate.
}
我有幾個選擇:
(如果我很幸運,我可能會貢獻一些代碼回到該模塊。)
如果您想按照當前在Drupal CAS模塊中定義的方式來使用網關服務,那麼有一點需要注意。您必須將「緩存模式」設置爲「禁用」才能使CAS模塊正常工作。 (他們正計劃解決這個問題,不過,http://drupal.org/node/1280474) – 2012-01-15 07:30:29
由於CAS模塊mainainers之一,我想申請這討論會移至項目問題隊列中的問題。這段代碼應該完全沒有什麼不同,因爲使用「CheckAuthentication」應該導致drupal登錄。如果您得到不同的行爲,我們想知道並修復它。
我做到了。這是我的帖子:http://drupal.org/node/869926#comment-5464034。然後我被導演到這裏:http://drupal.org/node/1280474。事實證明,如果我將「緩存模式」設置爲「禁用」,則網關功能將起作用。 – 2012-01-15 07:37:06
我最初的反應是:爲了通過CAS進行身份驗證,客戶端應用程序(這裏是Drupal)需要將用戶重定向到CAS。這必須由Drupal明確要求;所以讓用戶保持匿名將永遠不會讓他們到CAS。 – yitznewton 2012-01-10 17:24:22
因此,我使用第二個Drupal網站作爲中央身份驗證服務。目前重定向到Drupal CAS將重新引導回來,因爲用戶已通過身份驗證,或者提供登錄頁面。我更喜歡Drupal CAS模塊中的2種模式。模式1,如果客戶端網站只是想檢查一個用戶是否已經被認證。模式2,如果客戶端網站正在重定向用戶登錄。 – 2012-01-11 17:38:48
我回頭看了一下CAS,我懷疑它是否支持「檢查用戶是否已被認證」,因爲IIRC CAS需要客戶端會話和cookie來完成它的工作。所以應用程序本身無法做到這一點。儘管如此,我並不積極。我發現CAS的交通流量令人困惑。 – yitznewton 2012-01-11 20:53:19