【发布时间】:2017-10-06 13:05:19
【问题描述】:
我尝试单独构建一个 spring boot oauth2 授权和资源服务器。
为了获得请求令牌的身份验证,资源服务器调用配置的 URI。
security:
oauth2:
resource:
user-info-uri: http://localhost:9999/uaa/user
在授权服务器中,我实现了 /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 中,自动配置会创建一个 UserInfoTokenService,OAuth2AuthenticationProcessingFilter 将使用它来调用期望返回类型 Map 的方法 /user。
第一个问题是!
校长不是地图。它是如何协同工作的?
第二个问题!
如果UserInfoTokenService调用授权服务器上的方法/user,则参数Principal为null,认证失败。
谁用值填充 Principal 参数?
最后一个问题是!
因为我徒劳地投入了太多时间,所以我尝试使用其他 URI
security:
oauth2:
resource:
token-info-uri: http://localhost:9999/uaa/oauth/check_token
但如果我只定义这个 URI,OAuth2AuthenticationProcessingFilter 会使用 DefaultTokenService 并尝试在资源服务器的 In-Memory 令牌存储中找到令牌。该服务没有找到它们并返回一个身份验证错误。
Spring Boot 自动配置应该创建一个像 TokeInfoTokenService 这样的服务来调用 token-info 端点。
为什么在这种情况下会创建 DefaultTokenService?
有人可以帮我吗?
【问题讨论】:
标签: spring spring-boot spring-security spring-oauth2