【问题标题】:How to get jwt token from Authorization如何从授权中获取 jwt 令牌
【发布时间】:2021-01-19 01:55:00
【问题描述】:

我在授权中使用 jwt 令牌发送请求。我需要以某种方式获取它,我尝试过这种方式:

@GetMapping
fun getUser(@AuthenticationPrincipal jwt: Jwt<*, *>): ResponseEntity<UserDto?> {
   val allClaimsFromToken: Claims? = getAllClaimsFromToken(jwt.toString());
   val userNameFromJwtToken: Any? = allClaimsFromToken?.get("sub");
   ....
}

不幸的是,我总是将 null 作为 jwt 变量。你能告诉我我做错了什么吗?

【问题讨论】:

  • 我猜第一个问题是你是如何收到令牌的?您使用的是 Spring Security OAuth2 吗?或者它只是一个被传递的标题?
  • @ced-b 它只是邮递员中授权字段的标题
  • 好了,就这么简单,JWT 用的是什么库?
  • @ced-b 使用 jjwt
  • 好的,请看下文,如果有帮助请告诉我。

标签: spring kotlin jwt


【解决方案1】:

可能最直接的方法是获取原始标头值,然后使用 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,它可以实现更多自动化。或者您可以创建一个过滤器来进行解析,这样您就不必在每次网络调用时都重复此操作。

另请参阅此帖子以获取更多想法Accessing JWT Token from a Spring Boot Rest Controller。它是 Java,但基本相同。

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 2017-08-22
    • 2020-07-19
    • 2019-06-04
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多