diff --git a/docker/config/application.tmpl b/docker/config/application.tmpl index c05c497c17c8eec0ca8644003994b1a85f87297c..0b8ee95bc4deffadc7c4243403a7ec94cdbabce2 100644 --- a/docker/config/application.tmpl +++ b/docker/config/application.tmpl @@ -30,6 +30,7 @@ hbp: clientSecret: {{ .Env.CLIENT_SECRET }} accessTokenUri: {{ default .Env.TOKEN_URI "https://services.humanbrainproject.eu/oidc/token" }} userAuthorizationUri: {{ default .Env.AUTH_URI "https://services.humanbrainproject.eu/oidc/authorize" }} + logoutUri: {{ default .Env.LOGOUT_URI }} tokenName: access_token authenticationScheme: query clientAuthenticationScheme: form diff --git a/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java b/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java index 9310be3de5104705f8d6bccf8310e7778bfc77ff..675d5a2e0cd0de1ae5167394bc8c598c3feb17fc 100644 --- a/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java +++ b/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java @@ -53,6 +53,18 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +//newlyadded for logout +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import java.net.URI; + + // See https://spring.io/guides/tutorials/spring-boot-oauth2/ for reference about configuring OAuth2 login // also http://cscarioni.blogspot.ch/2013/04/pro-spring-security-and-oauth-2.html @@ -76,6 +88,12 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { */ @Value("#{'${frontend.loginUrl:/login/hbp}'}") private String loginUrl; + + /** + * Absolute URL to redirect to when logout is required + */ + @Value("#{'${hbp.client.logoutUri:http://88.197.53.10:8095/auth/realms/Demo/protocol/openid-connect/logout}'}") + private String logoutUri; /** * Absolute URL to redirect to after successful login @@ -94,6 +112,8 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { */ @Value("#{'${hbp.resource.revokeTokenUri:https://services.humanbrainproject.eu/oidc/revoke}'}") private String revokeTokenURI; + + // @Autowired // private HttpServletRequest request; @@ -114,7 +134,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { //.anyRequest().authenticated() .anyRequest().hasRole("Researcher") .and().exceptionHandling().authenticationEntryPoint(new CustomLoginUrlAuthenticationEntryPoint(loginUrl)) - .and().logout().addLogoutHandler(new CustomLogoutHandler()).logoutSuccessUrl(redirectAfterLogoutUrl) + .and().logout().addLogoutHandler(authLogoutHandler()).logoutSuccessUrl(redirectAfterLogoutUrl) .and().logout().permitAll() .and().csrf().ignoringAntMatchers("/logout").csrfTokenRepository(csrfTokenRepository()) .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class) @@ -260,5 +280,35 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { return String.join(",", authorities); } } + + + private LogoutHandler authLogoutHandler() { + return (request, response, authentication) -> { + logout(); + }; + } + + + public void logout() { + // POSTã™ã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’ä½œæˆ + UserActionLogging.LogAction("refresh token ", this.oauth2ClientContext.getAccessToken().getRefreshToken().getValue()); + RestTemplate restTemplate = new RestTemplate(); + MultiValueMap<String, String> formParams = new LinkedMultiValueMap<>(); + formParams.add("client_id", hbp().getClientId()); + // formParams.add("client_secret", registration.getClientSecret()); + formParams.add("refresh_token", this.oauth2ClientContext.getAccessToken().getRefreshToken().getValue()); + // ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ˜ãƒƒãƒ€ãƒ¼ã‚’ä½œæˆ + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE); + // ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’ä½œæˆ + RequestEntity<MultiValueMap<String, String>> requestEntity = + new RequestEntity<>(formParams, httpHeaders, HttpMethod.POST, + //URI.create("http://88.197.53.10:8095/auth/realms/Demo/protocol/openid-connect/logout")); //todo make this parameter + URI.create(logoutUri)); //todo make this parameter + // POSTリクエストé€ä¿¡ï¼ˆãƒã‚°ã‚¢ã‚¦ãƒˆå®Ÿè¡Œï¼‰ + + ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class); + } + } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 3843fbca8ed514ad3269299ec31302e2d5825f50..d1875652cc7ba1694fefb4b757e97f770c30cb18 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -3,11 +3,13 @@ <file>logs/log1.txt</file> <append>true</append> <encoder> - <pattern>%msg%n</pattern> + <pattern>%d{yyyy-MM-dd} %msg%n</pattern> </encoder> </appender> - + <logger name="org.springframework"> + <appender-ref ref="FILE1" /> + </logger> <logger name="eu.hbp.mip.utils" level="INFO" additivity="false"> <appender-ref ref="FILE1" /> </logger>