ホームページ >バックエンド開発 >PHPチュートリアル >ssoシングルサインオンのPHP実装(Laravelフレームワーク)

ssoシングルサインオンのPHP実装(Laravelフレームワーク)

WBOY
WBOYオリジナル
2016-06-23 13:13:361081ブラウズ

私のブログアドレス: 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 にジャンプしてログインを確認すると、失敗したことがわかり、まだログインする必要があります。したがって、これは問題です。私たちのビジネスモジュールは相関性が低く、自由にジャンプしないため、当面はこの問題を考慮しません。しかし、これは私にとって間違いなく問題です。はっきりとは考えていませんでした。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。