我在 app.example.com 上使用javascript框架(vuejs)编写了SPA,它是使用PHP的主站点的附加工具, example.com
app.example.com和example.com共享相同的服务器和数据库(它也使用SSL),因此注册一次的用户将能够在所有子域和主域中进行身份验证。
第一个问题,与第二个问题相互连接:app.example.com将用户电子邮件/密码发送到我们的服务器进行请求身份验证,如果经过身份验证,服务器会设置会话$_SESSION['appUserId] = 10
,并且请求返回用户信息,我在其中设置了localStorage密钥及其令牌。 localStorage.setItem("appUserId", 10);
问题在于,我不确定如何通过app.example.com和example.com对用户进行身份验证,因为我现在必须检查用户是否通过了身份验证页面请求和app.example.com使用localStorage。
我知道我可以share the cookie between subdomain and domain,但我不确定这是否是最好的方法。例如,我可以替换cookie的localStorage,但可以通过浏览器修改cookie。
我还在学习一般安全性。
答案 0 :(得分:0)
如果您使用PHP会话,它已经负责在每个请求之间保留您的用户数据。
从PHP的角度来看,用户是已知用户,您可以访问他的数据。现在,你的棘手部分默认情况下,PHP将为其请求的域创建一个cookie。因此,如果它收到来自app.example.com的请求,那么如果您访问example.com,那么cookie将不会被发送到PHP,PHP将无法了解该用户。
您希望PHP始终使用域“.example.com”创建其cookie。这将解决从一个域而不是另一个域进行身份验证(在PHP端)的问题。
另外,我会避免使用浏览器存储来验证用户身份。某些浏览器无法隐身浏览器存储。