我正在尝试使用spring security构建授权服务器,该服务器主要用于保护SPA的安全,但还需要通过rest API支持移动应用程序的身份验证和授权。
为此,我正在尝试使用oauth2隐式授予来保护SPA(以后计划将其更改为具有PKCE的授权代码授予)。我需要身份验证才能作为休息请求,而不是像
中那样提交表单POST {用户名:测试,密码:测试}
我通过扩展AbstractAuthenticationProcessingFilter实现了自定义身份验证过滤器,我使用下面的代码块将身份验证对象设置为安全上下文
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
throws AuthenticationException {
try {
UserCredentials creds = new ObjectMapper().readValue(request.getInputStream(), UserCredentials.class);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
creds.getUsername(), creds.getPassword(), Collections.emptyList());
Authentication authentication = super.getAuthenticationManager().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
return authentication;
} catch (JsonParseException e) {
throw new BadAuthenticationRequestException("Error while parsing request", e);
} catch (JsonMappingException e) {
throw new BadAuthenticationRequestException("Error while mapping request", e);
} catch (IOException e) {
throw new BadAuthenticationRequestException("Error while reading request", e);
}
}
当我遇到邮递员的请求时(我正在与邮递员一起测试整个流程)
POST {用户名:测试,密码:测试}
在第二个请求中,当我尝试查看通过身份验证的主体时,身份验证对象似乎不在安全上下文中。
是否有人通过以JSON格式发送请求,然后通过JWT令牌进行oauth2授权来实现自定义身份验证?有任何指针或示例配置可以实现这一目标?谢谢