使用 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粉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
或類似內容不會進入瀏覽器非常重要。請參閱這個問題和其他幾個類似的問題,因為類似的問題已經以前經常問。