1

我设计了一个 Web 应用程序,它使用非常简单的 JWT 令牌实现来提供身份验证/授权。

我的实施:

  1. 有两种类型的 url 的公共和安全。
  2. 公共 url 用于生成带有用户名/密码的令牌。
  3. 我在安全 url 上添加了过滤器以检查授权标头和 JWT 令牌。

    @Bean    
    public FilterRegistrationBean jwtFilter() 
    {
         final FilterRegistrationBean registrationBean = new 
         FilterRegistrationBean();
         registrationBean.setFilter(new JwtFilter());
         registrationBean.addUrlPatterns("/secure/*");
    
         return registrationBean;
    

    }

  4. 过滤器将验证令牌。我还没有添加到期日期。

    final HttpServletRequest request = (HttpServletRequest) req;
    final HttpServletResponse response = (HttpServletResponse) res;
    final String authHeader = request.getHeader("authorization");
    
    if ("OPTIONS".equals(request.getMethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
    
        chain.doFilter(req, res);
    } else {
    
        if (authHeader == null || !authHeader.startsWith("Bearer ")) {
            throw new ServletException("Missing or invalid Authorization header");
        }
    
        final String token = authHeader.substring(7);
    
        try {
            final Claims claims = Jwts.parser().setSigningKey(secretKey.toString).parseClaimsJws(token).getBody();
            request.setAttribute("claims", claims);
        } catch (final SignatureException e) {
            throw new ServletException("Invalid token");
        }
    
        chain.doFilter(req, res);
    }
    

这提供了身份验证,并且它不受 CSRF 的影响。没有密钥,没有人可以创建有效的令牌。

我错过了对基于令牌的身份验证服务的其他攻击吗?

4

0 回答 0