2016-09-29 76 views
0

對於我們的客戶之一,我需要編寫自定義身份驗證源模塊。我已經將SimpleSAMLphp設置爲使用LDAP,SQLauth等各種身份驗證的Idp。所有這些身份驗證都有一個共同之處,那就是它們使用登錄表單並對sspmod_core_Auth_UserPassBase類進行身份驗證。這意味着將是用戶名和密碼等SimpleSAMLphp不帶密碼的自定義身份驗證

的特殊情況在這裏登錄格式如下:

的SAML安裝(IDP)是企業網絡內部。如果用戶(在該網絡內/通過AD認證)訪問該網絡內的主機,用戶名將被自動注入到其瀏覽器中,並且可通過$_SERVER['PHP_AUTH_USER']獲得,並且我們保證用戶已經被「驗證」 。

這意味着我們不必「認證」用戶了。我們不必顯示登錄表單,只需將該用戶標記爲已認證即可。

現在我有點卡住了,因爲對我的理解來說,寫一個自己的authsource會延長默認的UserPassBase類有點「過量」。我將不得不處理空密碼,並自動從登錄表格等轉發/張貼等。

我想有一個更好的方法來處理。流程將非常簡單:

SP重定向到IdP。 IdP的「登錄頁面」爲PHP_AUTH_USER(沒有輸出,如登錄表單),驗證用戶(沒有進一步檢查),並按照預期方式重定向,如果用戶被正確檢測到。如果無法找到PHP_AUTH_USER,用戶將被重定向到某種錯誤頁面。

任何想法如何解決這個正確的方法?我想我將不得不編寫自己的全新的authsource類來擴展基類SimpleSAML_Auth_Source類?也許有人有這樣的例子,在我要重新發明輪子之前!?

回答

1

看看exampleAuth:Staticauthsource。它自動記錄你在特定的用戶

'example-static' => array(
    'exampleauth:Static', 
    'uid' => array('testuser'), 
    'eduPersonAffiliation' => array('member', 'employee'), 
    'cn' => array('Test User'), 
), 

你可以創建自己的模塊喜歡,但不是加載從authsource配置屬性,基於用戶名加載它們。並做類似

public function authenticate(&$state) { 
    $user = $_SERVER['PHP_AUTH_USER']; 
    if ($user) { 
     $attributes = loadAttributesForUser($user); 
     $state['Attributes'] = $attributes; 
    } else { 
     throw new Exception('No user found'); 
    } 
} 
+0

正是!謝謝! – Marco