ホームページ > バックエンド開発 > PHPチュートリアル > owncloud ソース コード分析 5 -- CAS シングル サインオン

owncloud ソース コード分析 5 -- CAS シングル サインオン

WBOY
リリース: 2016-07-30 13:31:43
オリジナル
1592 人が閲覧しました

CAS シングル サインオン

1. 図


に示すように、簡単に参照できるように CAS パッケージを libprivate の下に置きます。 2. handleLogin() を owncloudlibbase の 976 行目に導入します。 php メソッドで、このメソッドの内容を次のように変更します:

<span>if(!$_REQUEST['logout']) {
   OC_App::loadApps(array('prelogin'));
}
//引入cas类库
require_once 'private\CAS.php';</span>
ログイン後にコピー
<pre class="brush:php;toolbar:false"><span>phpCAS::setDebug();

// 初始化client
phpCAS::client(CAS_VERSION_2_0, '192.168.6.101', 8080, '/sso');


// 如果sso服务器是https方式的,那么需要配置信任证书。如果是http的方式,那么注释掉此项
// phpCAS::setCasServerCACert('AdminCA1.crt');
phpCAS::setNoCasServerValidation();

// 如果需要用户映射,那么需要设置serverCode,如果不需要可以注释掉
// phpCAS::setServerCode('pt.jcsj');

//处理单点退出请求,第一个参数为false,即为不进行客户端验证
phpCAS::handleLogoutRequests(false, false);

// phpCAS::setNoCasServerValidation();

// 进行认证
phpCAS::forceAuthentication();

if (isset($_REQUEST['logout'])) {
   phpCAS::logout();
   die;
   //header("Location: " . OC::$WEBROOT.(empty(OC::$WEBROOT) ? '/' : ''));
}
// logout if desired
//将下面的值存储到session对象中,如果存在phpCAS的user用户则执行本地登录
//print_r(phpCAS::getAttributes());die;
if(phpCAS::getUser()) {
   if (OC_User::login(phpCAS::getUser())) {
      $userId = OC_User::getUser();
      // setting up the time zone
      if (isset($_POST['timezone-offset'])) {
         self::$server->getSession()->set('timezone', $_POST['timezone-offset']);
         self::$server->getConfig()->setUserValue($userId, 'core', 'timezone', $_POST['timezone']);
      }

      self::cleanupLoginTokens($userId);
      if (!empty($_POST["remember_login"])) {
         if (defined("DEBUG") && DEBUG) {
            self::$server->getLogger()->debug('Setting remember login to cookie', array('app' => 'core'));
         }
         $token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(32);
         self::$server->getConfig()->setUserValue($userId, 'login_token', $token, time());
         OC_User::setMagicInCookie($userId, $token);
      } else {
         OC_User::unsetMagicInCookie();
      }
      OC_Util::redirectToDefaultPage();
      exit();
   }
}</span>
ログイン後にコピー
また、owncloudlibprivateuserdatabase.php の checkPassword メソッド (行 158) を次のように変更します:
<pre class="brush:php;toolbar:false"><span>$query = OC_DB::prepare('SELECT `uid`, `password` FROM `*PREFIX*users` WHERE LOWER(`uid`) = LOWER(?)');
$result = $query->execute(array($uid));
$row = $result->fetchRow();
if ($row) {
   //直接返回查询的信息
   /*$storedHash = $row['password'];
   $newHash = '';
   if (\OC::$server->getHasher()->verify($password, $storedHash, $newHash)) {
      if (!empty($newHash)) {
         $this->setPassword($uid, $password);
      }*/
      return $row['uid'];

   //}
}else{
   return false;
}

return false;</span>
ログイン後にコピー

OVER!!

著作権ステートメント:この記事はブロガーによるオリジナル記事であり、ブロガーの許可なしに転載することはできません。

上記では、owncloud のソース コード分析 5-CAS シングル サインオンについて、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート