首页  >  问答  >  正文

使用 axios 的公共端点需要不记名令牌

使用 Vue.js,我尝试使用 Spring Boot 在 RESTful API 中实现 JWT 登录表单,但除非我将不记名令牌添加到请求中,否则我得到的只是 403 状态。 我已将端点设置为无需任何许可即可访问,并且在邮递员上可以在没有授权标头的情况下发送请求。 这是我在 Spring 上的安全配置的一部分:

.antMatchers(HttpMethod.POST, "/auth/login")
.permitAll()

这是我发出 POST 请求的 vue.js 服务:

import axios from 'axios'


let USER_API_BASE_URL = 'http://localhost:8080/auth/login/'
let config = {
    headers: {
    'Content-Type': 'application/json',
    'Authorization': "Bearer (hereGoesTheToken)"
    }}

class LoginService{
    postLogin(emailInput, passwordInput){
        let user = JSON.stringify({email: emailInput, password: passwordInput});
        var response = axios.post(USER_API_BASE_URL, user, config);
        console.log(response)
        return response
    }
}

export default new LoginService()

我想要做到这一点,这样就不需要令牌就可以访问您请求相同令牌的部分...有什么方法可以做到这一点吗?

P粉845862826P粉845862826205 天前388

全部回复(1)我来回复

  • P粉347804896

    P粉3478048962024-03-28 19:56:08

    我不是 100% 确定,但您的 403 很可能是由 CSRF 保护引起的。查看 JWT登录示例了解如何在服务器上启用 JWT 身份验证的示例。

    综上所述,如果您启用HTTP basic (.httpBasic())并禁用会话管理(.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)),您还可以禁用CSRF (.csrf() .disable())。这将是实现您想要做的事情的推荐方法,因为无状态服务器(就会话管理而言)不易受到 CSRF 保护的影响。

    您还可以实现自己的身份验证端点,这是您的示例,在这种情况下您不需要启用 .httpBasic()。在这种情况下,您可以使用 .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt) 。请查看此 Tanzu Tuesday 演讲,了解有关 JWT 身份验证的更多信息(为什么以及为什么不)。

    需要指出的是,服务器上任何形式的会话都会使您容易受到 CSRF 攻击,因此确保 JSESSIONID 或类似内容不会进入浏览器非常重要。请参阅这个问题和其他几个类似的问题,因为类似的问题已经以前经常问。

    回复
    0
  • 取消回复