繁体   English   中英

一个人如何创建一个接受基本auth标头或oauth2访问令牌的端点?

[英]How would one create an endpoint that accepts either a basic auth header or an oauth2 access token?

我已经使用Spring Boot安全性设置了OAuth2身份验证服务器,并且一切正常。 接下来,我要创建一个超级用户,该用户可以仅通过基本身份验证标头将请求发送到每个端点,而不会影响其他用户的身份验证流程。 Spring Boot安全性有可能吗?

谢谢克里斯

对的,这是可能的。

一种选择是使用ROLES,因此您可以选择哪个用户使用@Secured注释访问每个端点。

其他选项包括实现自己的过滤器以在请求之前运行。 这是一个使用JWT令牌过滤器和验证的简单示例:

public class JWTConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {

@Override
    public void configure(HttpSecurity http) {
        JWTFilter customFilter = new JWTFilter();
        http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
    }

}

public class JWTFilter extends GenericFilterBean {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
        throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// Here go your implementation
        String jwt = resolveToken(httpServletRequest);
        if (isTokenValid(jwt)) {
            Authentication authentication = getAuthenticationFromToken(jwt);
            SecurityContextHolder.getContext().setAuthentication(authentication);
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }

private String resolveToken(HttpServletRequest request) {
        String bearerToken = request.getHeader("YOUR-AUTHORIZATION-HEADER");
        if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
            return bearerToken.substring(7, bearerToken.length());
        }
        return null;
    }


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM