5

我有兴趣将自定义休息端点添加到我的 OAuth2 授权服务器。

我想添加一个注册端点,我的 UI 资源服务器可以调用该端点,注册一个用户,并一次性取回一个令牌(注册时自动登录)。

由于 UI 资源服务器具有用户的密码,因此我可以在两个请求中执行此操作,但我更愿意一次执行此操作,因为我正在重新使用授权服务器来存储我的所有用户凭据。

我创建了一个端点

@FrameworkEndpoint
class RegistrationController {

  @Autowired
  LocalUserAuthenticationService userDetailsService

  @Autowired
  TokenEndpoint tokenEndpoint

  @RequestMapping(value = "/registration", method = RequestMethod.POST)
  @ResponseStatus(HttpStatus.CREATED)
  public ResponseEntity<OAuth2AccessToken> registerUser(Principal principal,
                                                        @RequestBody @Valid RegistrationRequest registrationRequest) {
    userDetailsService.register(registrationRequest.email, registrationRequest.password)
    return tokenEndpoint.getAccessToken(principal, [grant_type: 'password', username: registrationRequest.email, password: registrationRequest.password])
  }
}

我在我的上下文中注册它

@EnableAuthorizationServer
public class AuthServerConfig {

@Bean
public RegistrationController(){
   return new RegistrationController()
} ... more
}

但是,以这种方式使用该请求总是未经授权的。它说它找不到用户。它可以解析基本的身份验证凭据,但是无论在哪里寻找它们,尽管此 bean 已在此上下文中注册,但它无法找到它们。

@FrameworkEndpoint 的文档说

Use with @RequestMapping and all the other @Controller features (and match with a FrameworkEndpointHandlerMapping in the servlet context)

但我似乎无法破解如何实际做到这一点。或者如果我误解了它。

如何正确注册它,使其像其他框架 bean 一样工作?

4

0 回答 0