spring:为什么在端点中返回整个oauth2user是不好的?

hfsqlsce  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(423)

根据本教程,我正在使用spring boot构建一个oauth2认证应用程序:https://spring.io/guides/tutorials/spring-boot-oauth2/
在某一点上,端点/用户发回当前登录的用户。
指南警告说:
“在端点中返回整个OAuth2用户不是一个好主意,因为它可能包含您不想向浏览器客户端透露的信息。”
但是它没有提供更多的信息——我不应该向浏览器客户端透露什么类型的信息?
谢谢

33qvvth1

33qvvth11#

在SpringSecurity5.x中 OAuth2User 这是一个具体的问题 OAuth2AuthenticatedPrincipal (非常类似于 UserDetails 但没有任何密码的概念)。即使没有密码,公开密码也可能(而且通常会)泄露敏感信息、身份验证方案的实施细节等。如果您愿意,您可以公开密码,但指南中的警告建议应小心,不要公开任何被认为敏感的信息,在直接暴露之前,你应该考虑其他选择。
例如,您可以考虑创建 CustomUser 类中的声明填充的 OAuth2User 使用自定义 OAuth2UserService (文档高级配置部分中的各种示例)。您还可以采取各种步骤将spring security中的oauth2用户表示与应用程序中的用户表示分离(例如,通过使用@authenticationprincipal来解析您自己的自定义用户或访问声明)。如果应用程序本身不需要自定义用户,则只需Map OAuth2User 在自定义端点中创建响应,如指南中所示。
最后,您可以将所有这些技术结合起来,使您的 /user 端点又是一个“一行线”,如:

@Target({ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@AuthenticationPrincipal(expression = "customUser")
public @interface CurrentUser {}
@GetMapping("/user")
public CustomUser user(@CurrentUser CustomUser customUser) {
    return customUser;
}

相关问题