如果我有 csrf 令牌,我还需要一个不记名令牌吗?

Do I even need a bearer token, if i have a csrf token?

我正在开发 Laravel API,我想使用不记名令牌与 VueJS 前端进行安全通信。然后我的一个朋友告诉我,这是不必要的,因为 Laravel 已经使用 CSRF Token 来抵御 XSS 攻击。

那么,如果我已经使用了 csrf 令牌,那么我基于令牌的身份验证基本上就没用了吗?为什么?

你在这里谈论的是两件不同的事情。 Bearer token 用于对 API 进行身份验证,例如,CSRF Token 用于防止跨端请求伪造攻击。

不记名令牌是您对外部 api 服务(如护照或会员卡)的登录令牌,因此您被授予访问此外部服务的权限。令牌还告诉服务器person/machine 访问资源的人是谁,因此服务器可以决定他们是否具有正确的权限。

CSRF 令牌可保护您免受请求伪造,即有人从外部服务器或工具向您的服务器发出请求。 CSRF 令牌唯一告诉你的是请求来自使用你网站的人,它不会告诉你那个人是谁或者他们有什么权限。

希望你明白。也许你应该研究 CSRF 维基百科条目 https://en.wikipedia.org/wiki/Cross-site_request_forgery

以及不记名令牌的一些信息:https://en.wikipedia.org/wiki/OAuth

你绝对应该添加某种基于无状态令牌的身份验证,考虑到 csrf 令牌仅用于屏蔽 XSS 攻击,而不是用于基于角色和权限对用户进行身份验证和授权。