如何验证来自 oauth 提供商的 jwt 令牌?

问题描述 投票:0回答:1

我正在开发一个项目,以 next-js/next-auth 作为我的前端,并以express 作为我的后端服务器。所以我想要弄清楚的是,一旦我通过第三方提供商(Github、Google 等)进行身份验证,并且当我使用 axios 将此令牌发送到后端时,我将令牌通过 jwt 回调放在会话中, 我应该如何验证这对于经过身份验证的用户来说是有效的令牌?.

或者也许我应该使用登录回调将此经过身份验证的用户及其相应的令牌保存到数据库,然后我可以根据数据库中存储的令牌验证此令牌?

或者我完全误解了它是如何工作的?

express next.js oauth-2.0 google-oauth next-auth
1个回答
0
投票

您不应该相信您能够在前端进行验证。您应该向其提出请求以获取所需的信息。如果用户未登录,调用将会失败。

在后端,您可以通过验证 JWT 的签名来验证 JWT 是否未被篡改。为此,您通常需要存储在 jwks 端点上的公钥。然后,进一步验证需要验证一些声明,包括它是否过期。

但是,这暴露了 OAuth 和 JWT 的弱点之一,即使您成功验证和验证令牌,用户也可能已注销。如果用户从提供商处注销,但令牌是

所以,理想的方法是,是的,使用它。提供商会告诉您他们当前是否已登录,通常是他们儿子的用户未经授权或类似类型的错误。

但是,如果您使用 next-auth,它应该会为您完成大部分工作。看看他们的 Client API 以及他们为会话提供的不同品种。您可以使用 JWT 或 db 方法,如其选项页面

所示

除非您无法承担对后端的调用,否则请使用存储在浏览器或安全 cookie 中的会话令牌,并将其映射到后端的用户和/或 JWT。这样,您就不会面临数据泄露的风险,或者更糟糕的是,JWT(访问令牌)提供的访问权限也不会泄露。

© www.soinside.com 2019 - 2024. All rights reserved.