Menggunakan Vue.js, saya cuba melaksanakan borang log masuk JWT dalam API RESTful menggunakan Spring Boot, tetapi melainkan saya menambah token pembawa pada permintaan, yang saya dapat hanyalah status 403. Saya telah menyediakan titik akhir untuk boleh diakses tanpa sebarang kebenaran dan pada posmen permintaan itu boleh dihantar tanpa pengepala kebenaran. Ini adalah sebahagian daripada konfigurasi keselamatan saya pada Spring:
.antMatchers(HttpMethod.POST, "/auth/login") .permitAll()
Ini adalah perkhidmatan vue.js saya yang membuat permintaan POST:
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()
Saya ingin membuat ini supaya tiada token diperlukan untuk mengakses bahagian di mana anda meminta token yang sama... Adakah terdapat sebarang cara untuk melakukan ini?
Saya tidak pasti 100%, tetapi 403 anda berkemungkinan besar disebabkan oleh perlindungan CSRF. Lihat Contoh Log Masuk JWT untuk contoh cara mendayakan pengesahan JWT pada pelayan anda.
Untuk meringkaskan, jika anda mendayakan asas HTTP (
.httpBasic()
)并禁用会话管理(.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
),您还可以禁用CSRF (.csrf() .disable()
). Ini akan menjadi cara yang disyorkan untuk mencapai perkara yang anda mahu lakukan, kerana pelayan tanpa kewarganegaraan (dari segi pengurusan sesi) kurang terdedah kepada perlindungan CSRF.Anda juga boleh melaksanakan titik akhir pengesahan anda sendiri, berikut ialah contoh anda, yang mana anda tidak perlu mendayakan
.httpBasic()
。在这种情况下,您可以使用.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
. Lihat Tanzu Tuesday talk ini untuk mengetahui lebih lanjut tentang pengesahan JWT (mengapa dan mengapa tidak).Adalah penting untuk menunjukkan bahawa sebarang bentuk sesi pada pelayan menjadikan anda terdedah kepada serangan CSRF, jadi adalah penting untuk memastikan bahawa
JSESSIONID
atau kandungan yang serupa tidak masuk ke dalam penyemak imbas. Sila lihat soalan ini dan beberapa soalan lain yang serupa, kerana soalan serupa telah kerap ditanya sebelum ini.