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

Posted

技术标签:

【中文标题】OAuth提供者重定向后如何给用户JWT令牌?【英文标题】:How to give user JWT token after OAuth provider redirect? 【发布时间】:2015-10-19 09:04:54 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

除了将 JWT 保存在 cookie 中以用于未来的 API 调用之外,我没有看到其他选项(用于 OAuth 用例)。但也许我错过了什么。

【讨论】:

我现在面临的问题是 jwt 令牌对于 cookie 来说可能太大了【参考方案2】:

在将控制权传递给 Facebook 身份验证之前,您可以启动与 API 的套接字连接,然后可能会在您的应用中显示加载状态。之后让 Facebook 做这件事。当它成功时,它会将数据发布到您的后端。您的后端会处理它并使用它之前创建的套接字将 JWT 传递给前端。这看起来工作量太大,如果您没有正确执行,可能会带来额外的错误。

【讨论】:

以上是关于OAuth提供者重定向后如何给用户JWT令牌?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Auth0 React 和 ASP.net 核心授权然后使用 JWT 令牌

重定向后如何管理 JWT?

使用 oauth2 和 jwt 在 FastApi 中进行身份验证

从 oauth 登录将 JWT 令牌返回到 javascript SPA

如果刷新(JWT)令牌未经授权(401响应),AngularJS重定向到登录

DocuSign 获取 JWT 令牌 MEAN Stack