วิธีรับ jwt token จาก Authorization
Oct 04 2020
ฉันกำลังส่งคำขอพร้อมโทเค็น jwt ในการอนุญาต ฉันต้องการดึงมันอย่างใดและฉันพยายามโดยวิธีนี้:
@GetMapping
fun getUser(@AuthenticationPrincipal jwt: Jwt<*, *>): ResponseEntity<UserDto?> {
val allClaimsFromToken: Claims? = getAllClaimsFromToken(jwt.toString());
val userNameFromJwtToken: Any? = allClaimsFromToken?.get("sub");
....
}
น่าเสียดายที่ฉันได้รับค่าว่างทั้งหมดเป็นตัวแปร jwt คุณช่วยบอกฉันได้ไหมว่าฉันทำอะไรผิด?
คำตอบ
ced-b Oct 05 2020 at 03:13
วิธีที่ตรงไปตรงมาที่สุดในการทำเช่นนี้คือการได้รับค่าส่วนหัวดิบแล้วแยกวิเคราะห์ด้วย JJWT
@GetMapping
fun getUser(@RequestHeader (name="Authorization") tokenEncoded: String): ResponseEntity<UserDto?> {
Jwt myToken = Jwts.parserBuilder()
.setSigningKey(yourKeyHere)
.build()
.parseClaimsJws(tokenEncoded.removePrefix("Bearer").trim());
// do something
}
คุณยังสามารถดูการใช้ไลบรารี Spring สำหรับ OAuth2 ได้โดยอัตโนมัติอีกเล็กน้อย หรือคุณสามารถสร้างตัวกรองที่แยกวิเคราะห์เพื่อที่คุณจะได้ไม่ต้องทำซ้ำในทุกการโทร
นอกจากนี้ยังเห็นโพสต์นี้สำหรับความคิดต่อการเข้าถึง JWT Token จากฤดูใบไม้ผลิ Boot Rest ควบคุม เป็น Java แต่โดยพื้นฐานแล้วจะใช้งานได้เหมือนกัน