ホームページ >バックエンド開発 >PHPチュートリアル >ssoシングルサインオンのPHP実装(Laravelフレームワーク)
私のブログアドレス: Luo Zhiqiang のブログ リンク交換やコミュニケーションへようこそ。
SSO を正しく理解しているかどうかわかりませんが、私のロジックを簡単に説明させてください。
3 つのサイト a.baidu.com b.baidu.com c.baidu.com
a.baidu.com が認証済みユーザーとしてアカウントにログインしているとします。
b と c はクライアント (サブシステム) として機能します。
b と c は、ログインする必要があるときに a にジャンプし、ログイン後にジャンプするリンクを示すパラメーター ソースを運びます。
a当サイトは通常のログイン方法(ユーザーパスワード認証)となっており、認証成功後に一部の処理が行われます。チケットは生成する必要がありますが、安全である限り、生成方法は関係ありません。次に、それをキャッシュに保存します。こちらでご質問がございましたら、後ほどまとめさせていただきます。ログインに成功したら、 (url. ``` php private function getTicketUrl()source)
{
(ticket = md5(time()+key); Cache::put()ticket, $user, 120); にジャンプします。
$url = $source . '?ticket=' . $ticket;
return $url;
}
駅 a がチケット (b.baidu.com?ticket=xxxxxxxxxxxxxxxx` ``) で駅 b にジャンプするとします。ステーション b はグローバル フィルタを作成し、このチケットを受け入れ、次にステーション a にチケットが a によって生成されたかどうかを確認するよう要求します。
B サイト フィルター AppHttpMiddlewareCasAuthenticate コード。ここでチケットがあるかどうかを判断し、検証のためにサイト a にリクエストを送信します。ログインしている場合は、ユーザーUIDを取得してログインします。
うわー
ロジックは完成しましたが、いくつか質問があります。
1. 私の実装が正しいかどうかはわかりません。
2. サイト b がサイト c にジャンプすると、サイト b はより頻繁にアクティブになるため、セッションは常に存在し、この時点でサイト a のキャッシュ時間が期限切れになる可能性が高くなります。 , ステーション c がステーション a にジャンプしてログインを確認すると、失敗したことがわかり、まだログインする必要があります。したがって、これは問題です。私たちのビジネスモジュールは相関性が低く、自由にジャンプしないため、当面はこの問題を考慮しません。しかし、これは私にとって間違いなく問題です。はっきりとは考えていませんでした。