【问题标题】:Authenticating user domain-wide with javascript and php使用 javascript 和 php 在域范围内对用户进行身份验证
【发布时间】:2018-09-29 03:14:38
【问题描述】:

我在 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 进行身份验证,因为现在,我必须检查用户是否通过每个页面请求和应用程序进行身份验证.example.com 使用 localStorage。

我知道我可以share the cookie between subdomain and domain,但我不确定这是否是最好的方法。例如,我可以将 localStorage 替换为 cookie,但可以通过浏览器修改 cookie。

我仍在学习一般安全知识。

【问题讨论】:

  • 你可以使用cookie,但是cookie名称应该是由随机生成器生成的唯一ID,例如PHP中的uniq(),所有重要的东西都在本地存储中。 (或服务器存储)即使黑客正在修改 cookie,他也需要知道您的代码生成的其他唯一 ID。
  • LocalStorage 也可以修改。它仍然存储在客户端中。我认为您应该查看JSON Web Tokens。这些存储在客户端上,但经过签名,因此任何修改都会使它们失效。

标签: javascript php frameworks


【解决方案1】:

如果您在 PHP 中使用 session,它已经负责在每个请求之间保存您的用户数据。

  1. 用户请求主页example.com/home
  2. 用户验证 example.com/login
  3. PHP 设置会话 cookie 并在会话中存储数据
  4. 用户请求下一页example.com/nextpage,此处浏览器将发送回会话cookie,PHP可以从会话中加载存储的数据

从 PHP 的角度来看,用户是已知用户,您可以访问他的数据。现在你最棘手的部分是默认情况下 PHP 会为它被请求的域创建一个 cookie。因此,如果它收到来自 app.example.com 的请求,如果您随后访问 example.com,该 cookie 将不会发送到 PHP,PHP 将不知道该用户。

您希望 PHP 始终使用域“.example.com”创建其 cookie。这将解决从一个域而不是另一个域进行身份验证(在 PHP 端)的问题。

另外我会避免使用浏览器存储来验证用户。浏览器存储在某些隐身浏览器中不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2015-04-03
    • 2010-10-07
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多