mirror of https://github.com/usbharu/Hideout.git
				
				
				
			feat: Signatureヘッダーが存在するが、認証に失敗したときは401を返すように
This commit is contained in:
		
							parent
							
								
									22ab5a8988
								
							
						
					
					
						commit
						59c6fc06c8
					
				|  | @ -46,11 +46,13 @@ import org.springframework.security.oauth2.server.authorization.settings.Authori | |||
| import org.springframework.security.oauth2.server.authorization.token.JwtEncodingContext | ||||
| import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer | ||||
| import org.springframework.security.web.SecurityFilterChain | ||||
| import org.springframework.security.web.WebAttributes | ||||
| import org.springframework.security.web.access.ExceptionTranslationFilter | ||||
| import org.springframework.security.web.authentication.AuthenticationEntryPointFailureHandler | ||||
| import org.springframework.security.web.authentication.HttpStatusEntryPoint | ||||
| import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint | ||||
| import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider | ||||
| import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher | ||||
| import org.springframework.security.web.util.matcher.AnyRequestMatcher | ||||
| import org.springframework.web.servlet.handler.HandlerMappingIntrospector | ||||
| import java.security.KeyPairGenerator | ||||
| import java.security.interfaces.RSAPrivateKey | ||||
|  | @ -58,7 +60,7 @@ import java.security.interfaces.RSAPublicKey | |||
| import java.util.* | ||||
| 
 | ||||
| 
 | ||||
| @EnableWebSecurity(debug = true) | ||||
| @EnableWebSecurity(debug = false) | ||||
| @Configuration | ||||
| @Suppress("FunctionMaxLength", "TooManyFunctions") | ||||
| class SecurityConfig { | ||||
|  | @ -77,6 +79,10 @@ class SecurityConfig { | |||
| 
 | ||||
|             .securityMatcher("/inbox", "/outbox", "/users/*/inbox", "/users/*/outbox", "/users/*/posts/*") | ||||
|             .addFilter(httpSignatureFilter) | ||||
|             .addFilterBefore( | ||||
|                 ExceptionTranslationFilter(HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)), | ||||
|                 HttpSignatureFilter::class.java | ||||
|             ) | ||||
|             .authorizeHttpRequests { | ||||
|                 it.anyRequest().permitAll() | ||||
|             } | ||||
|  | @ -85,6 +91,10 @@ class SecurityConfig { | |||
|             } | ||||
|             .exceptionHandling { | ||||
|                 it.authenticationEntryPoint(HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)) | ||||
|                 it.defaultAuthenticationEntryPointFor( | ||||
|                     HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED), | ||||
|                     AnyRequestMatcher.INSTANCE | ||||
|                 ) | ||||
|             } | ||||
|             .sessionManagement { | ||||
|                 it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) | ||||
|  | @ -97,17 +107,12 @@ class SecurityConfig { | |||
|     fun getHttpSignatureFilter(authenticationManager: AuthenticationManager): HttpSignatureFilter { | ||||
|         val httpSignatureFilter = HttpSignatureFilter(DefaultSignatureHeaderParser()) | ||||
|         httpSignatureFilter.setAuthenticationManager(authenticationManager) | ||||
|         httpSignatureFilter.setAuthenticationFailureHandler { request, response, exception -> | ||||
|             println(response::class.java) | ||||
|             if (response.isCommitted) { | ||||
|                 return@setAuthenticationFailureHandler | ||||
|             } | ||||
|             response.setStatus(HttpStatus.UNAUTHORIZED.value()) | ||||
|             request.getSession(false)?.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION) | ||||
|             response.outputStream.close() | ||||
|         } | ||||
|         httpSignatureFilter.setCheckForPrincipalChanges(true) | ||||
|         httpSignatureFilter.setInvalidateSessionOnPrincipalChange(true) | ||||
|         httpSignatureFilter.setContinueFilterChainOnUnsuccessfulAuthentication(false) | ||||
|         val authenticationEntryPointFailureHandler = | ||||
|             AuthenticationEntryPointFailureHandler(HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)) | ||||
|         authenticationEntryPointFailureHandler.setRethrowAuthenticationServiceException(false) | ||||
|         httpSignatureFilter.setAuthenticationFailureHandler(authenticationEntryPointFailureHandler) | ||||
| 
 | ||||
|         return httpSignatureFilter | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue