インターネットの発展に伴い、ユーザーのログイン機能を使用する Web サイトやアプリケーションが増えています。その中でも重要な実装方法の 1 つがユーザーのシングル サインオン (シングル サインオン、SSO と呼ばれます) です。この方法を使用すると、ユーザーは 1 つのサイトまたはアプリケーションにログインするだけで、そのサイトまたはアプリケーションに関連する他の複数のサイトまたはアプリケーションに同時にアクセスできるため、ユーザーの使用が大幅に容易になります。
この記事では、ユーザー シングル サインオンとは何か、および PHP コードを使用してこれを実装する方法について説明します。
ユーザー シングル サインオン (SSO) は、ユーザーが 1 回のログインで複数の関連サイトまたはアプリケーションにアクセスできるようにするユーザー認証方法です。従来のログイン方法では、ユーザーは Web サイトまたはアプリケーションごとに個別にログインする必要があり、通常はユーザー名とパスワードの入力が必要になります。一方、シングル サインオンでは、複数のサイトまたはアプリケーション間でログイン情報を共有できるため、ユーザーが 1 つのサイトまたはアプリケーションから別のサイトまたはアプリケーションに移動するときにログイン情報を入力する必要がなくなります。
シングル サインオンにより、ユーザー エクスペリエンスが大幅に向上し、すべての Web サイトやアプリケーションで同じログイン資格情報を入力するという面倒なプロセスからユーザーが解放されます。また、特に強力なパスワードを使用する場合、セキュリティも向上します。これにより、ユーザーが脆弱なパスワードや同じパスワードを使用することによるリスクを回避できます。
次に、簡単な例を使用して、PHP を使用してユーザー シングル サインオン機能を実装する方法を示します。 a.example.com と b.example.com という 2 つの Web サイトまたはアプリケーションがあるシナリオを考えてみましょう。ユーザーが a.example.com にアクセスした後、再ログインすることなく b.example.com にアクセスできるようにしたいと考えています。
この目標を達成するために、次の側面から始めます:
PHP では、$_SESSION# を使用できます。 ## ユーザー関連のセッション情報を保存する変数。ユーザーがサイト a.example.com にログインすると、ユーザーの認証情報 (ユーザー名やパスワードなど) だけでなく、ユーザーがアクセスできるページなどの他のセッション データも a.example.com に保存できます。アクセス、その他の権限など。
php.ini ファイルで
session.cookie_domain をメイン ドメイン名 (つまり
example.com) として設定する必要があります。このようにすると、両方のサイトで使用されるセッション ID が同じになります。同時に、両方のサイトで MySQL や Redis などの同じセッション ストレージ メカニズムを使用する必要もあります。
header 関数を使用する必要があります。 PHP でクロスサイトリダイレクトを実行します。
session_start(); $session_id = session_id(); $url = "https://b.example.com/login.php?session_id=" . $session_id; header("Location: $url");このコードは、ユーザーのダイレクトをリセットします。 b.example.com の login.php ページにアクセスし、URL パラメータでセッション ID を渡します。 b.example.com の
login.php ページでは、URL パラメータのセッション ID を確認し、そのセッション ID を使用してユーザーに関連するセッション データを取得する必要があります。 。関連するデータが取得された場合、ユーザーはログイン済みとしてマークされます。コードは次のとおりです:
session_id($_GET['session_id']); session_start(); // 检查该 Session ID 是否存在对应用户的 Session 数据 if (isset($_SESSION['user_id'])) { $_SESSION['logged_in'] = true; // 标识用户已经登录 }3. クロスサイト ログアウトクロスサイト ログインに加えて、クロスサイト ログアウトも考慮する必要があります。クロスサイト ログアウトには通常、次の手順が含まれます。
session_destroy() 関数を呼び出して、現在のユーザーに関連するすべてのセッション データを削除するだけで済みます。これにより、ユーザーは現在のサイトからログアウトされます。 。
$user_id = 123; $request_url = "https://b.example.com/logout.php"; $ch = curl_init($request_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, array('user_id' => $user_id)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch);ステップ 4 では、前と同様に各サイトのセッション データを削除するための同様のコードを実装する必要があります。たとえば、b.example.com では、次のコードを記述して、現在のユーザーに関連するセッション データを削除できます。
session_start(); session_destroy();
由于跨站点登录的特殊性,它会导致被恶意利用以进行跨站点会话劫持。攻击者可以通过某种方式获得受害者生成的 Session ID,然后将该 Session ID 用于攻击者自己的会话中,以此来获取受害者的权限。
为了防止这种情况的发生,我们可以使用以下几种方式来提高安全性:
session_regenerate_id()
函数定期更新 Session ID,从而减小攻击者获取当前会话 ID 的可能性。在本文中,我们介绍了用户单点登录(SSO)的含义和意义,并使用 PHP 代码演示了如何实现基本的 SSO 方案。通过单点登录,可以提高用户在网站或应用程序间的使用体验,同时也能够提高安全性。而为了确保安全性,我们还需要在保证使用方便的基础上,考虑到跨站点会话劫持等安全风险,采取相应的安全措施。相信本文对于正在考虑或正在使用用户单点登录的 PHP 开发人员来说,会有所帮助。
以上がPHP はユーザーのシングル サインオンを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。