5

javaconfig (XML 없음)만을 사용하여 다이제스트 인증을위한 Spring 4.0 및 Spring Security (3.2.0)를 어떻게 구성합니까? 아래의 구성 클래스를 사용하고 있지만 모든 요청은 HTTP 401에서 거부되고 "Nonce는 두 개의 토큰을 가져 왔음에 틀림 없지만 (... 메시지가 거기에서 멈 춥니 다").JavaConfig를 사용하는 스프링 보안 다이제스트 인증 예

인증 : = "사용자"다이제스트 사용자 이름, 영역 = "myrealm", 비표 = "", URI = "/ 서비스 나는 헤더를 포함하여 클라이언트 측에서 인증을 시도하고

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class SecurityConfigurationDigest extends WebSecurityConfigurerAdapter 
{ 
@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
{ 
    auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception 
{ 
    http.authorizeRequests().antMatchers("/**").authenticated().and().addFilter(digestAuthenticationFilter(digestEntryPoint())); 
} 

@Override 
@Bean 
public UserDetailsService userDetailsServiceBean() throws Exception 
{ 
    return super.userDetailsServiceBean(); 
} 

public DigestAuthenticationFilter digestAuthenticationFilter(DigestAuthenticationEntryPoint digestAuthenticationEntryPoint) throws Exception 
{ 
    DigestAuthenticationFilter digestAuthenticationFilter = new DigestAuthenticationFilter(); 
    digestAuthenticationFilter.setAuthenticationEntryPoint(digestEntryPoint()); 
    digestAuthenticationFilter.setUserDetailsService(userDetailsServiceBean()); 
    return digestAuthenticationFilter; 
} 

@Bean 
public DigestAuthenticationEntryPoint digestEntryPoint() 
{ 
    DigestAuthenticationEntryPoint digestAuthenticationEntryPoint = new DigestAuthenticationEntryPoint(); 
    digestAuthenticationEntryPoint.setKey("mykey"); 
    digestAuthenticationEntryPoint.setRealmName("myrealm"); 
    return digestAuthenticationEntryPoint; 
} 
} 

? param = 98 ", response ="fcd46faf42a583499d4e7f0371171ef2 ", opaque =" "

이 클래스를 HttpBasic 기반 구성으로 되돌리려면 의도 한 서비스에 액세스 할 수 있습니다. 내 구성 또는 요청에 문제가 있습니까? 위의 코드 대부분은 다른 게시물에서 빌려 왔지만이 컨텍스트에서 작동하는 것은 불가능합니다. 이 모든 것은 Spring Boot 0.5.0M7 내에서 실행된다.

감사합니다.

답변

0

요청이 불완전한 것으로 보입니다. noonce 매개 변수는 digest processing filter 참조에 따라 base64로 인코딩 된 값을 포함해야합니다.

다이제스트로 인증 인증은 "nonce"입니다. 이것은 서버가 생성하는 값입니다. 봄 Security의 비표는 다음과 같은 형식으로 채택 : 아무것도 서버에서 비표를 얻을하는 경우

base64(expirationTime + ":" + md5Hex(expirationTime + ":" + key)) 
expirationTime: The date and time when the nonce expires, expressed in milliseconds 
key:    A private key to prevent modification of the nonce token 
0

SpringPatrick 모두가, 요청이있는 흐름을 설명을, 서버는이 헤더를 제공

: 영역 ", 비표 ="IVjZjc3Yg == ", QOP ="인증 "WWW 인증 = 다이제스트 영역은"헤이 CL에 "당신은 누구"

의 401 응답에

는 말 " ient. nonce 및 기타 stuff을 사용하여 md5 해시가 생성되어 서버로 전송됩니다. 이제 서버가 행복해지며 요청을 처리합니다. 당신이 1 단계에서 만든 밝은면을보고 더 나은 설명을 위해 링크를 확인하십시오