我有一个旧的 Symfony 2.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的用户,但User
在app2中没有相关实现。
app2如何知道我已登录app1?
显然,您不能在不共享类的情况下共享会话文件,考虑到版本之间的差距,这几乎不是一种选择。
在一般情况下,您需要在系统上使用单点登录之一 - OAuth2、OpenId 等。例如https://github.com/FriendsOfSymfony/FOSOAuthServerBundle
或者,您可以手动完成,这将需要更多的编码,但可以根据您的需求进行定制,并且可能降低运营成本。在这种情况下,您的 app1 应提供 API 以通过 sessionId 返回用户信息,而 app2 应实现自定义身份验证以查询此 API。API 不应公开,并且仅可用于 app2 容器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句