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

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

1)cms.mydomain.com上的CMS(在PHP中完成).

2)SPA – 单页网页应用程序(用JavaScript完成),位于spa.mydomain.com.

我的用户案例:

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

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

用户可以选择一个项目,然后在SPA应用程序的新窗口中打开.

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

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

笔记:

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

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

>带有查询字符串参数的URL保存在Web服务器日志中,访问它们可能会危及安全性.
> Google Analytic等第三方应用程序可以在其报告中存储此类URL和查询字符串.

我想知道您的意见:

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

谢谢你的时间.

最佳答案 您也许可以为SPA创建一次性访问令牌,而不是将原始承载令牌作为查询字符串发送.

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

点赞