如何在OAuth提供程序重定向后给用户JWT令牌?

如何在OAuth提供程序重定向后给用户JWT令牌?,oauth,jwt,rauth,Oauth,Jwt,Rauth,我正在实现OAuth(使用rauth),并将提供JWT令牌(使用flask JWT)、javascript前端(Angular1)。我已经为经典的基于cookie/会话的应用程序完成了这项工作。它起作用了。现在我想用JWT代币来做 如果我理解正确,用户被重定向到提供商(例如谷歌),登录到帐户,我的服务器和提供商执行魔术,然后提供商将用户重定向回我的页面。现在我得到了用户配置文件,这就结束了OAuth部分。在正常会话中,您为用户提供cookies和其他用于设置会话的内容,然后将其重定向到主页 这就

我正在实现OAuth(使用rauth),并将提供JWT令牌(使用flask JWT)、javascript前端(Angular1)。我已经为经典的基于cookie/会话的应用程序完成了这项工作。它起作用了。现在我想用JWT代币来做

如果我理解正确,用户被重定向到提供商(例如谷歌),登录到帐户,我的服务器和提供商执行魔术,然后提供商将用户重定向回我的页面。现在我得到了用户配置文件,这就结束了OAuth部分。在正常会话中,您为用户提供cookies和其他用于设置会话的内容,然后将其重定向到主页


这就是我被困的地方。在提供者将用户发送回JWT令牌后,如何给用户JWT令牌有什么好的实践吗?在重定向到主页时将其作为cookie提供给用户?把它放在头上?据我所知,我需要javascript将令牌保存到LocalStorage/SessionStorage中。

在一天结束时,用户将被重定向回我们的应用程序,其中现在需要呈现页面。我看到的唯一选择是将JWT作为cookie返回,因为响应头在Javascript中是不可访问的&唯一的另一个地方是将其嵌入DOM中,这将使其面临CSRF攻击

当浏览器从OAuth提供程序重定向时,它只有一个可以在服务器端交换为访问令牌的访问代码。但最佳实践表明,您需要对访问令牌保密(而不是将其传递回浏览器)

关于JWT在Cookie和本地/会话存储中的作用有很多争论,但在这个用例中,除了使用Cookie,我看不到任何其他选择。我所看到的所有描述使用浏览器存储的用例都假设正在发出XHR请求以获取JWT。但这在OAuth流中不是一个选项,因为整个浏览器刚刚被重定向回我们的应用程序


除了将JWT保存在cookie中以用于将来的API调用之外,我看不到其他选项(对于OAuth用例)。但可能我遗漏了什么。

在将控制权传递给Facebook auth之前,您可以启动到API的套接字连接,然后可能会在应用程序中显示加载状态。之后,让Facebook做它的事情。成功后,它会将数据发布到后端。您的后端使用先前创建的套接字进行填充并将JWT传递给前端。这似乎是太多的工作&如果你做得不正确,可能会带来额外的bug

我现在面临的问题是,jwt令牌对于cookie来说可能太大了