这是哪种类型的列表,我如何访问 tokenValue?
Which type of list is this and how can I access tokenValue?
我必须实现一个 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"));
}
这里可以看到调试器内部的结构:
好的,这个问题有点令人困惑,但我会尽力回答。
首先,你有方法 return 类型 Map,map 是一个集合接口,有多个实现,更多关于 map 在这里:https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
其次,因为你有一个方法 return type as map,你在逻辑上 returning 一个映射,return Collections.singletonMap(key, val) 并且在你的情况是一张地图,其中一个条目以“response”为键,任何字符串响应都是 returned 形式的 rest 调用:restTemplate.getForObject(uri, String.class).
第三,您的主体有一个 DefaultOidcUser 实现 class,它具有获取主体令牌的方法,例如:public OidcIdToken getIdToken(),更多信息请参见:https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/core/oidc/user/DefaultOidcUser.html
希望这能解决一些问题,
干杯。
我必须实现一个 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"));
}
这里可以看到调试器内部的结构:
好的,这个问题有点令人困惑,但我会尽力回答。
首先,你有方法 return 类型 Map
其次,因为你有一个方法 return type as map,你在逻辑上 returning 一个映射,return Collections.singletonMap(key, val) 并且在你的情况是一张地图,其中一个条目以“response”为键,任何字符串响应都是 returned 形式的 rest 调用:restTemplate.getForObject(uri, String.class).
第三,您的主体有一个 DefaultOidcUser 实现 class,它具有获取主体令牌的方法,例如:public OidcIdToken getIdToken(),更多信息请参见:https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/core/oidc/user/DefaultOidcUser.html
希望这能解决一些问题, 干杯。