วิธีรับ 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 แต่โดยพื้นฐานแล้วจะใช้งานได้เหมือนกัน