如何使用查询字符串从两个Web应用程序传递承载令牌?

时间:2016-06-02 18:14:05

标签: javascript api security

我在两个子域上托管了两个Web应用程序(原型),例如:

1)cms.mydomain.com上的CMS(用PHP完成)。

2)SPA - 单页网页应用程序(在 JavaScript 中完成)位于spa.mydomain.com。

我的用户案例:

用户可以访问CMS应用程序并使用用户名和密码进行身份验证。

验证成功完成后,CMS应用程序上会显示包含一些项目的网页。

用户可以选择一个项目而不是在带有SPA应用程序的新窗口中打开

目前,在CMS应用中完成身份验证后,会创建承载令牌,我们会将TOKEN作为查询字符串传递给SPA应用,以便进行身份验证用户。

SPA app JavaScript检索查询字符串和其他附加参数并执行API调用以便运行。

注意:

  • 我们在两个应用程序上都使用HTTPS。
  • 只有在CMS中进行身份验证后才能访问SPA应用程序。
  • 接收令牌的SPA应用程序位于.HTML文件上,API调用仅使用JS。
  • Bearer Token的有效期为14天。
  • 令牌可以完全访问SPA应用程序。
  • 可以使用JS将令牌从CMD传递到SPA。
  • 令牌由第三个应用程序api.mysite.com生成。

我知道查询字符串中的TOKEN可能是不安全的,因为:

  • 带有查询字符串参数的网址保存在网络服务器日志中,访问它们可能会影响安全性。

  • Google Analytic等第三方应用程序可以在其报告中存储此类网址和查询字符串。

我想了解你的意见:

  • 在不使用查询字符串的情况下,将令牌从CMS传递到APP的安全方法是什么?
  • 我在想是否可以在CMS中使用Window.postMessage()将令牌作为消息发送到SPA。您是否看到此方法存在任何安全问题?
  • 如果使用查询字符串,我可能遇到的其他风险(我需要说服我的团队查询字符串不是一个好方法 - 如果是真的:))?
  • 你能指出一些额外的资源或指南吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您可以为SPA创建一次性访问令牌,而不是将原始承载令牌作为查询字符串发送。

然后可以将此令牌发送到API,解码并用于创建真正的身份验证令牌,但其优点是只有一次有效。现在您不再需要担心服务器日志,GA等。我认为这是一种重定向形式,可以缓解这些问题。