Heim  >  Artikel  >  PHP-Framework  >  Wie thinkphp Single Sign-On implementiert

Wie thinkphp Single Sign-On implementiert

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼Original
2019-08-26 11:02:176435Durchsuche

Wie thinkphp Single Sign-On implementiert

1. Voraussetzung: Der CAS-Server wurde eingerichtet

Dies ist nicht der Schwerpunkt dieses Artikels, daher werde ich nicht auf Details eingehen. Portal: https://blog.csdn.net/u013825231/article/details/79132399

2. PHPCAS-Client herunterladen

PHP-Client-Download: https://github.com /apereo/ phpCAS

Hinweise zur PHP-Client-Konfiguration: https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252517/phpCAS

php-Client-Anforderungen: https://apereo. atlassian.net/wiki/spaces/CASC/pages/103252625/phpCAS+requirements

Hinweis: Die PHP-Konfigurationsdatei php.ini muss php_curl aktivieren, find;extension=php_curl.dll, einfach das Semikolon entfernen vor dem Satz und ändern Sie ihn in extension=php_curl.dll

3. Thinkphp5 führt die phpCAS-Klassenbibliothek ein

1. Laden Sie die phpCAS-Client-Dateistruktur herunter.

Wie thinkphp Single Sign-On implementiert

Verwandte Empfehlungen: „ThinkPHP Tutorial

2. Kopieren Sie den Quellordner in den Erweiterungsordner unter Thinphp5 und benennen Sie ihn in um : phpCAS

Wie thinkphp Single Sign-On implementiert

Wie thinkphp Single Sign-On implementiert

3. Konfiguration der config.php-Datei

<?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 = &#39;phpCAS/&#39;;
 
///////////////////////////////////////
// Basic Config of the phpCAS client //
///////////////////////////////////////
$client_domain = &#39;localhost&#39;; // 客户端 domain 
$client_path = &#39;afschool&#39;;
$client_secure = false;
$client_httpOnly = true;
$client_lifetime = 0;
 
// Full Hostname of your CAS Server 服务器主机
$cas_host = &#39;cas.example.com&#39;;
 
// Context of the CAS Server  
$cas_context = &#39;/cas&#39;;
 
// Port of your CAS server. Normally for a https server it&#39;s 443
$cas_port = 443;
 
// Path to the ca chain that issued the cas server certificate
$cas_server_ca_cert_path = &#39;/path/to/cachain.pem&#39;;
 
//////////////////////////////////////////
// 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 (
&#39;cas-real-1.example.com&#39;,
&#39;cas-real-2.example.com&#39;
);
 
// Database config for PGT Storage
$db = &#39;pgsql:host=localhost;dbname=phpcas&#39;;
//$db = &#39;mysql:host=localhost;dbname=phpcas&#39;;
$db_user = &#39;phpcasuser&#39;;
$db_password = &#39;mysupersecretpass&#39;;
$db_table = &#39;phpcastabel&#39;;
 
///////////////////////////////////////////
// End Configuration -- Don&#39;t edit below //
///////////////////////////////////////////
 
// Generating the URLS for the local cas example services for proxy testing
if ( isset($_SERVER[&#39;HTTPS&#39;]) && $_SERVER[&#39;HTTPS&#39;] == &#39;on&#39;){
$curbase = &#39;https://&#39;.$_SERVER[&#39;SERVER_NAME&#39;];
}else{
$curbase = &#39;http://&#39;.$_SERVER[&#39;SERVER_NAME&#39;];
}
if ($_SERVER[&#39;SERVER_PORT&#39;] != 80 && $_SERVER[&#39;SERVER_PORT&#39;] != 443)
$curbase .= &#39;:&#39;.$_SERVER[&#39;SERVER_PORT&#39;];
 
$curdir = dirname($_SERVER[&#39;REQUEST_URI&#39;])."/";
 
 
// CAS client nodes for rebroadcasting pgtIou/pgtId and logoutRequest
$rebroadcast_node_1 = &#39;http://cas-client-1.example.com&#39;;
$rebroadcast_node_2 = &#39;http://cas-client-2.example.com&#39;;
 
// access to a single service
$serviceUrl = $curbase.$curdir.&#39;example_service.php&#39;;
// access to a second service
$serviceUrl2 = $curbase.$curdir.&#39;example_service_that_proxies.php&#39;;
 
$pgtBase = preg_quote(preg_replace(&#39;/^http:/&#39;, &#39;https:&#39;, $curbase.$curdir),&#39;/&#39;);
$pgtUrlRegexp = &#39;/^&#39;.$pgtBase.&#39;.*$/&#39;;
 
$cas_url = &#39;https://&#39;.$cas_host;
if ($cas_port != &#39;443&#39;)
{
$cas_url = $cas_url.&#39;:&#39;.$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&#39;t share its session with a proxied script.
// This is just useful when running the example code, but not normally.
session_name(&#39;session_for:&#39;.preg_replace(&#39;/[^a-z0-9-]/i&#39;, &#39;_&#39;, basename($_SERVER[&#39;SCRIPT_NAME&#39;])));
?>

4. Weil Der Server, auf dem ich Single Sign-On angefordert habe, ist http-authentifiziert, nicht https. Ich muss CAS/client.php ändern und https in http ändern (die Datei client.php wurde zu Beginn nicht geändert und es wurde immer die https-Authentifizierung verwendet. Also die Anfrage ist fehlgeschlagen)

5. Benennen Sie die Geschwisterdatei CAS.php des CAS-Klassenbibliotheksordners in phpCAS.php um

Wie thinkphp Single Sign-On implementiert

und ändern Sie sie in

Wie thinkphp Single Sign-On implementiert

6. Die Login-Controller-Methode ist:

<?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 &#39;./extend/config.php&#39;;
        // Loader::import(&#39;config.php&#39;,EXTEND_PATH);
        // Load the CAS lib
        //直接引入phpCAS扩展库下的类文件phpCAS.php
        Loader::import(&#39;phpCAS\phpCAS&#39;,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=&#39;http://www.baidu.com&#39;;</script>";
 
        };
        
     }
}

Besuchen Sie abschließend diese Login-Methode, um den Sprung zur Single-Sign-In-Seite abzuschließen!

Das obige ist der detaillierte Inhalt vonWie thinkphp Single Sign-On implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn