【问题标题】:Which type of list is this and how can I access tokenValue?这是哪种类型的列表,我如何访问 tokenValue?
【发布时间】:2021-12-03 10:53:18
【问题描述】:

我必须实现一个 OAuth 客户端,并且在访问 JWT 令牌以进一步向 OAuth 服务器请求时遇到了一些困难。

我已经在调试器中找到了它(它位于变量 principal 中的某个位置,可以访问 - 我需要访问 principalidTokentokenValue),但我不知道是哪个这是列表的类型以及如何将其内容存储在变量中?

令人困惑的是,principal 也有一些内容 (String)。但它似乎也是某种列表,可以扩展,还有更多元素由Strings 索引。

函数,我正在尝试访问令牌(最后的注释行不起作用):

// calling Google Calendar API
@GetMapping("/api_request")
public Map<String, Object> getCalendars(@AuthenticationPrincipal OAuth2User principal) {
    // JWT is saved as String in principal→idToken→tokenValue
    String uri = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
    RestTemplate restTemplate = new RestTemplate();
    return Collections.singletonMap("response",restTemplate.getForObject(uri, String.class));
    //  return Collections.singletonMap("principal",principal.getAttribute("idToken"));
}

在这里你可以看到调试器内部的结构:

【问题讨论】:

    标签: java spring spring-boot oauth jwt


    【解决方案1】:

    好的,这个问题有点令人困惑,但我会尽力回答。

    首先,你有方法返回类型 Map,一个 map 是一个集合接口,它有多个实现,更多关于 map 在这里:https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

    其次,由于您有一个方法返回类型为映射,因此您在逻辑上返回一个映射,返回 Collections.singletonMap(key, val),在您的情况下,它是一个映射,其中一个条目具有“响应”作为键,并且从 rest 调用返回的任何字符串响应:restTemplate.getForObject(uri, String.class)。

    第三,您的委托人有一个 DefaultOidcUser 实现类,它具有获取委托人令牌的方法,例如:public OidcIdToken getIdToken(),更多信息在这里:https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/core/oidc/user/DefaultOidcUser.html

    希望这能解决一些问题, 干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      相关资源
      最近更新 更多