Mit Vue.js versuche ich, ein JWT-Anmeldeformular in einer RESTful-API mit Spring Boot zu implementieren, aber wenn ich der Anfrage nicht das Bearer-Token hinzufüge, erhalte ich nur den Status 403. Ich habe den Endpunkt so eingerichtet, dass er ohne Erlaubnis zugänglich ist, und auf Postman kann die Anfrage ohne den Autorisierungsheader gesendet werden. Dies ist Teil meiner Sicherheitskonfiguration für Spring:
.antMatchers(HttpMethod.POST, "/auth/login") .permitAll()
Dies ist mein vue.js-Dienst, der die POST-Anfrage stellt:
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()
Ich möchte dafür sorgen, dass kein Token erforderlich ist, um auf den Teil zuzugreifen, in dem Sie denselben Token angefordert haben ... Gibt es eine Möglichkeit, dies zu tun?
我不是 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
或类似内容不会进入浏览器非常重要。请参阅这个问题和其他几个类似的问题,因为类似的问题已经以前经常问。