2016-06-29 53 views
3

我有一个Web应用程序,将处理与OAuth2的身份验证。认证后,Web应用程序具有令牌并可以访问资源。但是,如果用户刷新页面或关闭浏览器并稍后回来,令牌将丢失,用户必须重新登录。用户体验方面非常糟糕。如何在页面刷新时发送OAuth2访问令牌?

此外,服务器端代码会检查用户是否已登录,并仅在用户登录时才发送应用程序的主页。如果不是,则会重定向到登录页面。

由于OAuth2令牌作为标题发送到服务器,因此当用户在地址栏中键入站点名称时,浏览器不会发送任何令牌。

我打算在cookie中发送访问令牌。这是一个合适的解决方案?

回答

1

如果您使用的是React,您可能希望将您的访问令牌设置为您在window.ready()或ComponentDidMount()生命周期钩子上发送到tour API或Server的每个HTTP请求的默认标头。

然后,这样做后,您可以开始使用您的首选库(如axios)获取数据或在应用程序准备就绪时获取数据。

为此,您只需将访问令牌第一次保存在本地存储中,然后在window.ready()上检索它。 您将在您的应用容器组件或index.html文件中的脚本标记中执行此操作。

尽管此解决方案不会使您能够为安全路由执行服务器端水合,特别是当您的数据来自独立API时。 使用这种解决方案解决服务器端水合的唯一方法是将用户访问令牌设置为url中的查询字符串参数,这样浏览器即使不执行javascript也可以将其传递给服务器;但与此相关的安全漏洞明显存在。

希望这会有所帮助,欢呼声。

+0

当用户输入网站名称到浏览器的地址栏时,怎么样?在这种情况下如何发送访问令牌? – zarax

+0

我们在这里讨论安全路线。也就是说,将会有公共路线,向用户提供公开可用的数据,并且不需要获取访问令牌,也不需要访问令牌。如果您的主页需要为用户提取受限制的数据,我的建议是您放弃为这些路由获取服务器端数据并通过AJAX请求继续进行客户端获取。 在这种情况下,令牌将从本地存储中检索并作为HTTP请求中的标头发送。 – xechelonx

+0

我需要主页上的访问令牌,以便用户可以直接进入应用程序,如果他的会话继续。您建议我可以将令牌保存到本地存储中,因此没有理由不保存在Cookie中。谢谢 – zarax

相关问题