[英]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.