私は古いSymfony2.4アプリ(php 5を使用)と標準のセキュリティ(form_login
ファイアウォールとロールベースの認証)を持っています。それをapp1と呼びましょう。
今、私は新しいSymfony 3.3アプリ(php 7)を作成しています。これを使用してセッションを維持し、ユーザーがシームレスに切り替えることができるようにします。それをapp2と呼びましょう。ユーザーの認証とストレージは引き続きapp1によって管理されます。
これらのアプリは、同じドメイン、異なるサブドメインでホストされています。app1セッションファイルをapp2に(Dockerボリュームで)共有することができました。
両方のアプリのセッション構成は次のとおりです。
framework:
session:
handler_id: session.handler.native_file
save_path: '%kernel.root_dir%/../var/sessions/%kernel.environment%'
cookie_domain: myapp.dev
したがって、app1にログインすると、app2にもログインしていると見なされることを期待しています。app2が正しいCookieを送信して
いるのを見ていますが、次のようにクラッシュします。
警告:クラス__PHP_Incomplete_Classにはアンシリアライザーがありません
実際には、app1のユーザーをセッションから逆シリアル化しようとしていますが、app2に関連するUser
実装がありません。
app2は、私がapp1にログインしていることをどのように知ることができますか?
明らかに、クラスを共有せずにセッションファイルを共有することはできません。これは、バージョン間のギャップを考慮するとほとんどオプションではありません。
一般的なケースでは、シングルサインオンシステムの1つ(OAuth2、OpenIdなど)を使用する必要があります。例:https://github.com/FriendsOfSymfony/FOSOAuthServerBundle
または、手動で行うこともできます。これには、もう少しコーディングが必要になりますが、ニーズに合わせて調整し、運用コストを削減できる可能性があります。この場合、app1はsessionIdによってユーザー情報を返すAPIを提供する必要があり、app2はこのAPIをクエリするためのカスタム認証を実装する必要があります。APIは公開しないでください。また、app2コンテナでのみ使用できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加