ホームページ > 記事 > PHPフレームワーク > thinkphp がシングル サインオンを実装する方法
1. 前提条件: CAS サーバーの構築が完了している
これはこの記事の焦点ではないため、詳細については説明しません。ポータル: https://blog.csdn.net/u013825231/article/details/79132399
2.phpCAS クライアントのダウンロード
php クライアントのダウンロード: https://github.com /apereo/ phpCAS
php クライアント構成の注意事項とその他のコンテンツ: https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252517/phpCAS
php クライアントの要件: https:// apereo.atlassian.net/wiki/spaces/CASC/pages/103252625/phpCAS 要件
注: php 構成ファイル php.ini では、php_curl、find;extension=php_curl.dll を有効にする必要があります。セミコロンを削除するだけです。文の前にある を、extension=php_curl.dll
3 に変更します。Thinkphp5 では、phpCAS クラス ライブラリが導入されます
1. phpCAS クライアント ファイル構造をダウンロードします。
関連する推奨事項: 「ThinkPHP チュートリアル 」
2. ソース フォルダーを Thinphp5 の下の extend フォルダーにコピーし、名前を変更します。 to: phpCAS
#3. config.php ファイルの設定
<?php // The purpose of this central config file is configuring all examples // in one place with minimal work for your working environment // Just configure all the items in this config according to your environment // and rename the file to config.php $phpcas_path = 'phpCAS/'; /////////////////////////////////////// // Basic Config of the phpCAS client // /////////////////////////////////////// $client_domain = 'localhost'; // 客户端 domain $client_path = 'afschool'; $client_secure = false; $client_httpOnly = true; $client_lifetime = 0; // Full Hostname of your CAS Server 服务器主机 $cas_host = 'cas.example.com'; // Context of the CAS Server $cas_context = '/cas'; // Port of your CAS server. Normally for a https server it's 443 $cas_port = 443; // Path to the ca chain that issued the cas server certificate $cas_server_ca_cert_path = '/path/to/cachain.pem'; ////////////////////////////////////////// // Advanced Config for special purposes // ////////////////////////////////////////// // The "real" hosts of clustered cas server that send SAML logout messages // Assumes the cas server is load balanced across multiple hosts $cas_real_hosts = array ( 'cas-real-1.example.com', 'cas-real-2.example.com' ); // Database config for PGT Storage $db = 'pgsql:host=localhost;dbname=phpcas'; //$db = 'mysql:host=localhost;dbname=phpcas'; $db_user = 'phpcasuser'; $db_password = 'mysupersecretpass'; $db_table = 'phpcastabel'; /////////////////////////////////////////// // End Configuration -- Don't edit below // /////////////////////////////////////////// // Generating the URLS for the local cas example services for proxy testing if ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){ $curbase = 'https://'.$_SERVER['SERVER_NAME']; }else{ $curbase = 'http://'.$_SERVER['SERVER_NAME']; } if ($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) $curbase .= ':'.$_SERVER['SERVER_PORT']; $curdir = dirname($_SERVER['REQUEST_URI'])."/"; // CAS client nodes for rebroadcasting pgtIou/pgtId and logoutRequest $rebroadcast_node_1 = 'http://cas-client-1.example.com'; $rebroadcast_node_2 = 'http://cas-client-2.example.com'; // access to a single service $serviceUrl = $curbase.$curdir.'example_service.php'; // access to a second service $serviceUrl2 = $curbase.$curdir.'example_service_that_proxies.php'; $pgtBase = preg_quote(preg_replace('/^http:/', 'https:', $curbase.$curdir),'/'); $pgtUrlRegexp = '/^'.$pgtBase.'.*$/'; $cas_url = 'https://'.$cas_host; if ($cas_port != '443') { $cas_url = $cas_url.':'.$cas_port; } $cas_url = $cas_url.$cas_context; // Set the session-name to be unique to the current script so that the client script // doesn't share its session with a proxied script. // This is just useful when running the example code, but not normally. session_name('session_for:'.preg_replace('/[^a-z0-9-]/i', '_', basename($_SERVER['SCRIPT_NAME']))); ?>
4. なぜならシングル サインオンを要求するサーバーは https ではなく http 認証されているため、CAS/client.php を変更して https を http に変更する必要があります (client.php ファイルは最初は変更されておらず、常に https 認証が使用されます)。リクエストは失敗しました)
5. CAS クラス ライブラリ フォルダー内の兄弟ファイル CAS.php の名前を phpCAS.php
に変更し、
に変更します。6. ログイン コントローラー メソッドは次のとおりです:
<?php namespace app\index\controller; use think\Db; use think\Loader; class Index extends \think\Controller { public function login() { // Example for a simple client // Load the settings from the central config file require './extend/config.php'; // Loader::import('config.php',EXTEND_PATH); // Load the CAS lib //直接引入phpCAS扩展库下的类文件phpCAS.php Loader::import('phpCAS\phpCAS',EXTEND_PATH); //直接引入库文件需要实例化类 $phpCAS = new \phpCAS(); // Uncomment to enable debugging $phpCAS->setDebug(); // Initialize phpCAS $phpCAS->client(CAS_VERSION_2_0, $cas_host, $cas_port, $cas_context); // For quick testing you can disable SSL validation of the CAS server. // THIS SETTING IS NOT RECOMMENDED FOR PRODUCTION. // VALIDATING THE CAS SERVER IS CRUCIAL TO THE SECURITY OF THE CAS PROTOCOL! $phpCAS->setNoCasServerValidation(); //这里会检测服务器端的退出的通知,就能实现php和其他语言平台间同步登出了 $phpCAS->handleLogoutRequests(); //访问CAS的验证通过后,跳转到网页 if($phpCAS->forceAuthentication()){ echo "<script language=\"javascript\">parent.location.href='http://www.baidu.com';</script>"; }; } }
最後にこのログイン メソッドにアクセスして、シングル サインオン ページのジャンプを完了します。
以上がthinkphp がシングル サインオンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。