簡體   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