您在這裡

單一登入 Single sign-on

請教各位有做過單一登入的先進能在此區交流一些心得!

目的1:
台主機樣使用DRUPAL資料庫不同網站彼此登入
使用模組:
http://drupal.org/project/sso
Drupal版本:6.X

作法:
1.主站安裝:Single sign-on controller
修改/sites/default/settings.php
加入$conf['session_inc'] = 'sites/all/modules/sso/session.singlesignon.inc';

2.副站安裝:Single sign-on client
修改/sites/default/settings.php
加入$conf['session_inc'] = 'sites/all/modules/sso/session.singlesignon.inc';
把$db_prefix ='';改成
$db_prefix = array(
'default' => '',
'authmap' => '主站資料庫名稱',
'sessions' => '主站資料庫名稱',
'users' => '主站資料庫名稱',
'role' => '主站資料庫名稱',
);

3.將主站/管理/網站設定/Single sign-on controller
裡的Controller URL和Private key 貼到副站主站/管理/網站設定/Single sign-on client 裡的對應欄位

4.完成...功能正常

疑問: 不同主機不同網站同樣使用drupal彼此登入,請問該如何達成?
還有drupal6和drupal7的user欄位格式不同該如何達成彼此互登?

請各位前輩不吝指教!謝謝!

請問 Kay 有使用過 http://drupal.org/project/site_network 這個嗎?
不知道兩者比較起來如何,但是 site network 好舊了,之前沒找到 Bakery 這個哩。

看起來兩個的方式是不太一樣的,
Site Network 使用上我遇到的問題是,他能夠到 Master 去驗證帳號沒問題,但是 Slave 的帳號不會記錄到原有的 Email
因此 Slave 想要寄 Email 給他的使用者時,便出問題了,甚至影響 signup 的功能等等。

看了一下 Backery 的文件,沒有特別提到這點,
不過看看issue,也有不少反映 Master/Slave 帳號資料同步的問題。

謝謝大大的回應!

進行測試 http://drupal.org/project/bakery 這個模組的過程,遇到了幾個怪異的現象,不知如何解決!

首先說明我的測試環境與安裝設定:
1.下載並啟用該模組在master與slave網站(不同機器)
2.設定Master網站
Is this the master site?(打勾)
Master site:輸入完整網址(包括反斜線)>>>http://master.example.com.tw/
Slave sites:輸入完整網址(包括反斜線)>>>http://site1.example.com.tw/
Seconds of age before a cookie is old:使用預設3600
Private key for cookie validation:隨便輸入一組數字
Cookie domain:.example.com.tw
Supported profile fields :使用者名稱,電子郵件打勾
使者管理>權限>bakery 模組(admin 和 bypass 權限通通打勾)

3.設定Slaver網站
Is this the master site?(打勾)
Master site:輸入完整網址(包括反斜線)>>>http://master.example.com.tw/
Slave sites:留空
Seconds of age before a cookie is old:使用預設3600
Private key for cookie validation:輸入與master站相同數字
Cookie domain:.example.com.tw
Supported profile fields :使用者名稱,電子郵件打勾
使者管理>權限>bakery 模組(admin 和 bypass 權限通通打勾)

錯誤現象:
1.網站設定>效能>已經把所有快取都取消了 ,仍然出現一排紅字如下:
以下已啟用的模組與積極快取模式不相容,將無法正確運作: bakery.
2.在master登入連去slave並無直接登入效果
3.在salve登入會直接跳去master登入,但路徑會跑成master.example.com.tw/bakery/login
且頁面會出現 <拒絕存取 您沒有瀏覽此頁面的權限。>
直接輸入master.example.com.tw網址則正常並且登入master

原本SSO的預想是master登入的使用者點slave網站連結會直接登入slave,反之亦然,但現在這個現象與預期效果差很大,
請問有沒有大大曾經碰過此類問題,可以幫小弟解惑一下,感激不盡! 謝謝!

如果只是要達到「master登入的使用者點slave網站連結會直接登入slave,反之亦然」的話,似乎不用另外安裝模組。小弟提供先前在學校的經驗給您參考。

Drupal 版本: 6.x

  • 設定 settings.php 裡的 $db_prefix
    $db_prefix = array(
    'default' => '',
    // 以下為共用的資料表,我們是放在另外一顆叫 sub_shared 的資料庫中
    'users' => 'sub_shared.',
    'users_roles' => 'sub_shared.',
    'sessions' => 'sub_shared.',
    'role' => 'sub_shared.',
    'authmap' => 'sub_shared.',
    'profile_fields' => 'sub_shared.',
    'profile_values' => 'sub_shared.'
    );
  • 設定 settings.php 中的 $cookie_domain
    依您的例子: master.example.com.tw 與 site1.example.com.tw 的話,
    $cookie_domain 應設為 'example.com.tw'
    $cookie_domain = 'example.com.tw'; // 最前方不需要加 .
    所有要共用帳號的網站要將 $cookie_domain 設成一樣。

以上,供您參考。

謝謝idramer前輩的回答^^

您提供的方法小弟曾經嘗試過的確可達成「master登入的使用者點slave網站連結會直接登入slave,反之亦然」
但是小弟想要嚐試達成的功能為master網站裝在A server這個機器 , slaver網站裝在B server(另ㄧ台機器) 仍可彼此互登
嚐試了很久,仍然無法達成,所以才想借助別的方式達成,不知道是否有前輩曾經嘗試過類似的功能可以指導一下後進,感激不盡!

小弟卡在此一想法已經接近半年,類似像saimplesamlphp之類的方法也卡在各種奇奇怪怪的問題,對與使用drupal開發不同機器間的單一登入,已經想不到更好的嘗試方向了,還望有經驗的大大不吝指教一下小弟,小弟給您鞠躬了>_<""

只要您的 master 的資料庫主機與 slave 的資料庫主機是同一部(為了要共用某些資料表),而且這兩臺機器在同一個網域之下,上面說的設定方式應該就可以了。
但若是資料庫主機不是同一部,就不曉得該如何設定來共用資料表來達到你的要求了。 T_T

的確是如此,這領域似乎涉略的人比較少,是冷門的技術嗎?
小弟覺得跨機器的需求還蠻常出現的,但是卻不知如何克服,困擾阿>_<

drupal有許多好用的模組,所以彈性和擴充性很強大,但是照著手冊做不見得能正常運作,這是比較惱人的地方。

感謝idramer前輩的熱心回答,小弟繼續想辦法,如有心得再PO文分享,也希望有此開發經驗的前輩能分享心得,謝謝!

會不會需要利用LDAP Server來做管控,所有的主機都向他抓帳號資料!!
上次嘉義小聚,邱老師有提過這東西。
這樣做的好處是若你還須整合web-mail,FTP...等非Drupal的服務,統一使用者資訊。
只是不知道有沒有哪個大大有做成功過...
最好是LDAP又回頭來其中一個MySQL資料庫撈使用者資訊。