如何从oauth提供者验证jwt令牌?

8aqjt8rx  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(137)

我正在开发一个项目,我的前端是next-js/next-auth,后端是express。所以我想弄清楚的是,一旦我通过第三方提供商(Github,Google等)进行了身份验证,并且我通过jwt callback将token放在session上,当我使用axios将此token发送到我的后端时,我应该如何验证这是经过身份验证的用户的有效token?
或者我应该使用登录回调来保存这个经过身份验证的用户及其相应的令牌到一个数据库中,然后我可以根据存储在数据库中的令牌来验证这个令牌?
还是我完全误解了这是怎么回事?

nfg76nw0

nfg76nw01#

你不应该相信你可以在前端验证。你应该向它请求你需要的信息。如果用户没有登录,调用应该失败。
在后端,您可以通过验证JWT的签名来验证它没有被篡改。为此,您通常需要公钥,公钥通常存储在jwks端点上。进一步的验证需要验证一些声明,包括它是否过期。
然而,这暴露了OAuth和JWT的一个弱点,即使您成功地验证和确认了令牌,用户也可能已经注销。如果用户从提供程序注销,令牌就无法更新。只有在令牌发送到提供程序/authz服务器时,它才会失败(如果服务器在用户注销时正确地将其标记为无效)。但是,如果您仅在服务器的范围内使用它,则无法判断。
所以,理想的方式是,是的,使用它.供应商会告诉你他们是否当前登录,通常他们的儿子的用户未授权或类似类型的错误.
但是,如果你使用的是next-auth,它应该为你做大部分的事情。看看他们的Client API和他们为会话提供的不同种类。你可以使用JWT或db方法,如他们的options page所示。
除非你无法承担对后端的调用,否则请使用存储在浏览器或安全cookie中的会话令牌,并将其Map到后端的用户和/或JWT。这样,你就不会冒泄露数据的风险,或者更糟的是,JWT(访问令牌)提供的访问。

相关问题