我尝试分别构建一个spring boot oauth2 authorzation和resource server .

要获取请求令牌的身份验证,资源服务器将调用configrued URI .

security:      
      oauth2:
            resource:
            user-info-uri: http://localhost:9999/uaa/user

例如,在授权服务器中,我实现了一些教程中描述的方法/用户

https://spring.io/blog/2015/02/03/sso-with-oauth2-angular-js-and-spring-security-part-v

@SpringBootApplication
    @RestController
    @EnableAuthorizationServer
    public class ApplicationAuthorizationServer   {

    ... 

    @RequestMapping("/user")
    public Principal user(Principal user) {
      return user;
    }
   }

在spring boot中,autoconfiguration创建一个UserInfoTokenService,OAuth2AuthenticationProcessingFilter将使用它来调用期望返回类型Map的方法/用户 .

第一个问题是!

A Principal isn't a Map. How works it together?

第二个问题是!

如果UserInfoTokenService在授权服务器上调用方法/ user,则参数Principal为null,并且验证失败 .

Who fills the Principal parameter with a value?

最后一个问题是!

因为我徒劳地投入了这么多时间,所以我尝试使用其他URI

security:      
     oauth2:
       resource:
         token-info-uri: http://localhost:9999/uaa/oauth/check_token

但是,如果我只定义此URI,OAuth2AuthenticationProcessingFilter将使用DefaultTokenService并尝试在资源服务器的In-Memory令牌存储中查找令牌 . 该服务未找到它们并返回验证错误 .

Spring Boot自动配置应该创建像TokeInfoTokenService这样的服务,例如调用token-info endpoints .

Why in this case the DefaultTokenService is created?

有人能帮助我吗?