I'm implementing OAuth (using rauth) and will be giving JWT tokens (using flask-jwt), javascript frontend (Angular1). I have done it for classical cookie/session based app. It works. Now I want to do it with JWT tokens.
If I understand correctly, user is redirected to provider (ex. Google), login into account, my server and provider do the magic, then provider redirect user back to my page. Now I got user profile and that ends the OAuth part. With normal session you give user cookies and the rest of stuff for setting up session, then redirect him to home page.
This is where I'm stuck. Is there any good practice how to give user JWT token after provider send him back? Give it to user as cookie on redirect to home page? Put it in header? As far as I know I need javascript to save token into LocalStorage/SessionStorage.
答案 0 :(得分:7)
在一天结束时,用户将被重定向回我们的应用程序,现在需要呈现页面。我看到的唯一选择是将JWT作为cookie返回,因为响应标头在Javascript&唯一的另一个地方就是将它嵌入到DOM中,这样就可以打开CSRF攻击。
当浏览器从OAuth提供程序重定向时,它将只有一个访问代码,可以在服务器端交换访问令牌。但最佳实践表明,您需要保密该访问令牌(不将其传递回浏览器)。
关于JWT在cookie和本地/会话存储方面存在很多争议,但在这个用例中我没有看到除了使用cookie之外的任何其他选择。我所看到的所有使用浏览器存储的用例都假定正在进行XHR请求以获取JWT。但这不是OAuth流程中的一个选项,因为整个浏览器刚被重定向回我们的应用程序。
我没有看到另一个选项(对于OAuth用例),除了将JWT保留在cookie中以用于将来的API调用。但也许我错过了一些东西。
答案 1 :(得分:0)
在将控制权传递给Facebook auth之前,您可以启动与API的套接字连接,然后可能在应用程序中显示加载状态。之后,让Facebook去做。成功后,它将数据发布到您的后端。您的后端会进行填充,并使用之前创建的套接字将JWT传递给前端。这似乎工作量太大,而且如果操作不正确,可能还会带来其他错误。