簡體   English   中英

具有 axios 的公共端點所需的不記名令牌

[英]Bearer token required for a public endpoint with axios

Using Vue.js I am trying to implement a JWT login form in a RESTful API with Spring Boot, but unless I add the bearer token to the request, all I get is a 403 status. 我已將端點設置為無需任何許可即可訪問,並且在 postman 上,無需授權 header 即可發送請求。 這是我在 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()

我想做到這一點,因此不需要令牌即可訪問您請求相同令牌的部分......有什么辦法嗎?

我不是 100% 確定,但您的 403 似乎很可能是由 CSRF 保護引起的。 查看JWT 登錄示例,了解如何在服務器上啟用 JWT 身份驗證的示例。

總之,如果啟用 HTTP basic ( .httpBasic() ) 並禁用 session 管理 ( .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) ),您還可以禁用 CSRF ( .csrf().disable() 這將是實現您想要做的事情的推薦方法,因為無狀態服務器(就 session 管理而言)不易受到 CSRF 保護的影響。

您還可以實現自己的身份驗證端點,這是您的示例,在這種情況下,您不需要啟用.httpBasic() 在這種情況下,您可以只使用.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt) 查看這個Tanzu 星期二的談話,了解有關 JWT 身份驗證的更多信息(為什么以及為什么不)。

重要的是要指出,服務器上的任何形式的 session 都會使您容易受到 CSRF 攻擊,因此確保沒有JSESSIONID或類似的東西會影響瀏覽器是很重要的。 看到這個問題和其他幾個類似的問題,因為類似的問題以前經常被問到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM