首頁  >  問答  >  主體

使用 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 天前389

全部回覆(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
  • 取消回覆