我不得不在舊的 PHP 服務器上更新 simplesamlphp,該庫的舊版本是從 2010 年開始的。Simplesamlphp 在 SP 啟動的環境中用作服務提供程式 (SP)。
我將其替換為 09/'20 版本并對其進行了相同的配置。除了一件事,一切都在作業。
Simplesamlphp 使用 PHPSESSION 來存盤會話,通過功能它用他的替換 php 會話,并且應該在身份驗證完成后呼叫 cleanup() 方法(在會話實體上)再次設定舊的會話。
這不起作用,但我很好,因為這對用戶來說并不重要。
現在我必須實作一個按鈕來測驗受保護頁面上的 SAML 集成。受保護的意思是它需要經過身份驗證(通過 Zend Auth)才能查看頁面,否則它會自動將用戶重定向(服務器端)到主頁。
這是此按鈕的操作代碼(用于測驗 SAML 集成),位于此受保護的控制器內:
require_once('simplesaml/lib/_autoload.php');
$as = new SimpleSAML_Auth_Simple('cie');
$as->requireAuth(array(
'saml:idp' => $idp,
));
// --- user is redirected to the IDP and proceeds authenticating)...
$attributes = $as->getAttributes();
$session = \SimpleSAML\Session::getSessionFromRequest();
if($session){
$session->cleanup();
}
會發生什么:
- requireAuth()被呼叫,我當前的會話被擱置并替換為 SimpleSAML 的會話。
- 用戶被重定向到 IDP 并進行身份驗證
- IDP 將用戶重定向回我的頁面
- Zend 在我的代碼運行之前(在 requireAuth() 之后的一切都不會運行)和cleanup()方法被呼叫之前做它的事情,所以舊的 PHP 會話不會被恢復
- Zend 檢查用戶未通過身份驗證(因為它仍在使用 SimpleSAML 的會話)并將用戶重定向回主頁。
這么說,這不會發生在 2010 年的舊庫中,舊的 PHP 會話永遠不會丟失,我不知道為什么。我檢查了我同事們當天在舊圖書館所做的所有更改,但沒有任何內容可以解決這個問題。
有沒有人有任何想法或提示我可以遵循?解決此問題的任何解決方法/想法?
幾個星期以來,我一直在拼命地搜索東西,但很難找到具體的東西。
非常感謝你,只是為了閱讀這個長長的問題。
uj5u.com熱心網友回復:
經過許多小時后,我設法很容易地解決了這個問題,我會寫下我所做的,以防它可能對其他人有所幫助。
我的問題是:
- simplesamlphp 使用與我的應用程式相同的會話 cookie 名稱(我之前已經嘗試更改此設定,但由于下面的第二個原因,它從未起作用)
- 在我的代碼中沒有正確清理 simplesamlphp 會話
因此,首先,我添加了對清理方法的呼叫,因為它在真實頁面上丟失了,我的問題上發布的代碼是測驗頁面,這是缺少清理呼叫的真實頁面。
$as->requireAuth(array(
'saml:idp' => $idp,
));
$attributes = $as->getAttributes();
$session = \SimpleSAML\Session::getSessionFromRequest();
if($session){
$session->cleanup();
}
在沒有呼叫 cleanup() 的情況下,我在屬性 session.phpsession.cookiename 上放置的任何值除了 NULL (=使用 PHP 的設定)都會導致會話完全中斷。
因此,在添加 cleanup() 之后,我現在可以為屬性session.phpsession.cookiename (\config\config.php) 指定一個值。我指定了一個與 PHP 使用的名稱不同的值(因為這是問題所在),即默認值 PHPSESSID。
'session.phpsession.cookiename' => 'hSAMLses'
現在一切都很平靜,希望這個答案對某人有所幫助,因為我真的太掙扎了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/443365.html
標籤:php 网络 会议 Zend 框架 simplesamlphp
上一篇:LSTM輸出意外的預測形狀
