这是哪种类型的列表,我如何访问 tokenValue?
Posted
技术标签:
【中文标题】这是哪种类型的列表,我如何访问 tokenValue?【英文标题】:Which type of list is this and how can I access tokenValue? 【发布时间】:2021-12-03 10:53:18 【问题描述】:我必须实现一个 OAuth 客户端,并且在访问 JWT 令牌以进一步向 OAuth 服务器请求时遇到了一些困难。
我已经在调试器中找到了它(它位于变量 principal
中的某个位置,可以访问 - 我需要访问 principal
→ idToken
→ tokenValue
),但我不知道是哪个这是列表的类型以及如何将其内容存储在变量中?
令人困惑的是,principal
也有一些内容 (String
)。但它似乎也是某种列表,可以扩展,还有更多元素由String
s 索引。
函数,我正在尝试访问令牌(最后的注释行不起作用):
// 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"));
在这里你可以看到调试器内部的结构:
【问题讨论】:
【参考方案1】:好的,这个问题有点令人困惑,但我会尽力回答。
首先,你有方法返回类型 Map
其次,由于您有一个方法返回类型为映射,因此您在逻辑上返回一个映射,返回 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
希望这能解决一些问题, 干杯。
【讨论】:
以上是关于这是哪种类型的列表,我如何访问 tokenValue?的主要内容,如果未能解决你的问题,请参考以下文章