PHP SSOシングルサインオン実装原理分析

王林
リリース: 2023-10-15 13:04:01
オリジナル
694 人が閲覧しました

PHP SSO单点登录实现原理解析

PHP SSO シングル サインオン実装原理の分析

インターネットの発展に伴い、さまざまな Web サイトやアプリケーションを使用するときに、再ログインが必要になることがよくあります。この問題は、ユーザーの時間を無駄にするだけでなく、ユーザーにも不便をもたらします。この問題を解決するために登場したのがSSO(シングルサインオン)技術です。

1. SSO シングル サインオンの概念

SSO (シングル サインオン) は、ユーザーが複数の関連付けられたアプリケーションに 1 回だけログインして、これらのアプリケーションにアクセスできるようにする認証メカニズムです。 。簡単に言うと、ユーザーはログイン資格情報を一度入力するだけで、複数のアプリケーション間をシームレスに切り替えることができます。

2. SSO シングル サインオンの実装原則

SSO シングル サインオンの実装に必要な役割には、ユーザー、サービス プロバイダー (サービス プロバイダー、SP)、およびアイデンティティ プロバイダー (アイデンティティ プロバイダー) が含まれます、IdP)。ユーザーが初めてアプリケーションにログインすると、システムは ID 認証を実行し、認証結果をユーザーのブラウザー Cookie に保存し、一意の識別子を生成して、この識別子をアプリケーションのデータベースに保存します。ユーザーが他のアプリケーションにアクセスすると、この識別子もサービス プロバイダーのサーバーに送信され、サービス プロバイダーはこの識別子に基づいて認証を行い、ユーザーによる繰り返しのログインを回避できます。

SSO シングル サインオンの実装原理を理解するために、具体的な例を使用してみましょう。

  1. アイデンティティ プロバイダー (IdP) の作成

アイデンティティ プロバイダーは、ユーザー認証を担当するコア システムです。まず、アイデンティティ プロバイダー機能を実装するための PHP ファイルを作成します。

<?php
session_start();
// 验证用户名和密码
function authenticate($username, $password) {
    // 进行身份验证逻辑
    if ($username === 'admin' && $password === '123456') {
        return true;
    }
    return false;
}

// 用户登录
function login($username, $password) {
    $authenticated = authenticate($username, $password);
    if ($authenticated) {
        $_SESSION['user'] = $username; // 将用户名存储在Session中
        return true;
    }
    return false;
}

// 用户注销
function logout() {
    unset($_SESSION['user']); // 清除Session中的用户信息
}

// 检查用户是否已登录
function checkLogin() {
    return isset($_SESSION['user']);
}
?>
ログイン後にコピー
  1. サービス プロバイダー (SP) の作成

サービス プロバイダーは、アイデンティティ プロバイダーに依存して ID 認証を完了するアプリケーション システムです。同様に、サービス プロバイダーの機能を実装するための PHP ファイルを作成します。

<?php
include 'idp.php'; // 引入身份提供商的文件

// 检查用户是否登录
if (!checkLogin()) {
    header("Location: login.php"); // 用户未登录则跳转到登录页面
    exit;
}

// 用户已登录,显示内容
echo "Welcome " . $_SESSION['user'];
?>

<a href="logout.php">Logout</a>
ログイン後にコピー
  1. ユーザー ログイン用のページの作成

ユーザー ログイン用のサービス プロバイダーのディレクトリに、login.php ファイルを作成します。

<?php
include 'idp.php';

// 处理用户提交的登录表单
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    if (login($username, $password)) {
        header("Location: sp.php"); // 登录成功跳转到服务提供商页面
        exit;
    } else {
        echo "Invalid username or password";
    }
}
?>

<form method="POST">
    <input type="text" name="username" placeholder="Username" required><br>
    <input type="password" name="password" placeholder="Password" required><br>
    <button type="submit">Login</button>
</form>
ログイン後にコピー
  1. ユーザー ログアウト関数の作成

ユーザー ログアウト用のサービス プロバイダーのディレクトリに logout.php ファイルを作成します。

<?php
include 'idp.php';
logout(); // 用户注销
header("Location: login.php"); // 注销后跳转到登录页面
exit;
?>
ログイン後にコピー

3. 概要

SSO シングル サインオンは、アイデンティティ プロバイダーとサービス プロバイダーの協力により、ユーザーが一度ログインすると、それを複数のアプリケーションで使用できるようになります。実装プロセスでは、ログインのセキュリティを確保するために適切な認証メカニズムを採用する必要があり、認証結果の識別子はシステムに保存され、さまざまなアプリケーション間の認証を容易にします。以上、PHP SSO シングルサインオンの実装原理を分析しましたので、皆様のご参考になれば幸いです。

以上がPHP SSOシングルサインオン実装原理分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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