Есть ли лучший способ интеграции Spring с аутентификацией токена JWT? - PullRequest
0 голосов
/ 30 апреля 2020

Я работаю в проекте Spring Web Api, и мне нужно интегрировать мой API с внешним приложением, которое обеспечит мне аутентификацию и авторизацию. Мне просто нужно проверить токен JWT и передать его претензии моим контроллерам отдыха, что я сделал следующим образом:

public class JwtValidationFilter implements Filter {

private static String uri = "https://<external application domain>/.well-known/jwks";

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    JwtUtil jwtUtil = new JwtUtil(uri);
    HttpServletRequest req = (HttpServletRequest) request; 

    try {
        String authHeader = HeaderUtil.extractHeader("Authorization", req);
        String[] authArray = authHeader.split(" ");
        String token = authArray[1];

        Claims claims = jwtUtil.verifyAndGetTokenClaims(token);
        request.setAttribute("userClaims", claims);
        chain.doFilter(request, response);
    } 
    catch (Exception exception) {
        HttpServletResponse res = (HttpServletResponse) response;
        res.sendError(401, exception.getMessage());
    }
}

И в контроллере я получаю и использую userClaims следующим образом:

@GetMapping("/secret")
public String secret(@RequestAttribute("userClaims") Claims userClaims) {
    // DO SOME STUFF
}

Есть ли лучший способ сделать это? Мои решения работают, но выглядят наивными и сложными в обслуживании по мере роста веб-API.

Спасибо всем.

...