diff --git a/README.md b/README.md
index cce2f8af0..5a6f77fd5 100644
--- a/README.md
+++ b/README.md
@@ -12,10 +12,10 @@ To report an issue, please go to [issues](https://github.com/Esri/geoportal-serv
The nature of the Harvester application is, as the name suggests, to harvest metadata from whatever web endpoints it is provided. The list(s) of endpoints to download metadata from can also be provided by external entities over the internet. Neither the metadata being harvested nor the list(s) of endpoints provided by external entities are vetted or checked by the Harvester. **Users who wish to limit the scope of the Harvester's reach should configure the network or machine where the Harvester is located with allow lists or deny lists of web endpoints to prevent the Harvester from reaching undesirable locations.**
## Releases and Downloads
-- 2.7.1 - December 21, 2023, [release notes](https://github.com/Esri/geoportal-server-harvester/releases/tag/v2.7.1).
-- 2.7.0 - June 13, 2021.
-- 2.6.5 - July 13, 2021.
-- 2.6.4 - July 8, 2020.
+- 2.7.1 - December 21, 2023, click [here](https://github.com/Esri/geoportal-server-harvester/releases/tag/v2.7.1) for release notes and downloads.
+- 2.7.0 - June 13, 2021, click [here](https://github.com/Esri/geoportal-server-harvester/releases/tag/v2.7.1) for release notes and downloads.
+- 2.6.5 - July 13, 2021, click [here](https://github.com/Esri/geoportal-server-harvester/releases/tag/v2.6.5) for release notes and downloads.
+- 2.6.4 - July 8, 2020, click [here](https://github.com/Esri/geoportal-server-harvester/releases/tag/v2.6.4) for release notes and downloads.
## Features
diff --git a/geoportal-SDK/geoportal-harvester-api-base/pom.xml b/geoportal-SDK/geoportal-harvester-api-base/pom.xml
index af19d12e3..9302eed16 100644
--- a/geoportal-SDK/geoportal-harvester-api-base/pom.xml
+++ b/geoportal-SDK/geoportal-harvester-api-base/pom.xml
@@ -4,7 +4,7 @@
com.esri.geoportal
geoportal-SDK
- 2.7.1
+ 2.7.2
harvester-api-base
Esri :: Geoportal Server :: Harvester :: Api Base
diff --git a/geoportal-SDK/geoportal-harvester-api/pom.xml b/geoportal-SDK/geoportal-harvester-api/pom.xml
index 8ca7330a3..cb6af927c 100644
--- a/geoportal-SDK/geoportal-harvester-api/pom.xml
+++ b/geoportal-SDK/geoportal-harvester-api/pom.xml
@@ -4,12 +4,12 @@
geoportal-SDK
com.esri.geoportal
- 2.7.1
+ 2.7.2
harvester-api
Esri :: Geoportal Server :: Harvester :: Api
Definitions of all basic elements of the Harvester (interfaces, final classes, etc.).
- 2.7.1
+ 2.7.2
jar
diff --git a/geoportal-SDK/pom.xml b/geoportal-SDK/pom.xml
index 2088d0bb2..cf26e9675 100644
--- a/geoportal-SDK/pom.xml
+++ b/geoportal-SDK/pom.xml
@@ -4,7 +4,7 @@
geoportal-harvester
com.esri.geoportal
- 2.7.1
+ 2.7.2
geoportal-SDK
pom
diff --git a/geoportal-application/geoportal-harvester-cli/pom.xml b/geoportal-application/geoportal-harvester-cli/pom.xml
index 9d78426e8..ca40c1044 100644
--- a/geoportal-application/geoportal-harvester-cli/pom.xml
+++ b/geoportal-application/geoportal-harvester-cli/pom.xml
@@ -4,7 +4,7 @@
com.esri.geoportal
geoportal-application
- 2.7.1
+ 2.7.2
geoportal-harvester-cli
jar
diff --git a/geoportal-application/geoportal-harvester-engine/pom.xml b/geoportal-application/geoportal-harvester-engine/pom.xml
index efd007cf9..03cec7a5a 100644
--- a/geoportal-application/geoportal-harvester-engine/pom.xml
+++ b/geoportal-application/geoportal-harvester-engine/pom.xml
@@ -4,7 +4,7 @@
geoportal-application
com.esri.geoportal
- 2.7.1
+ 2.7.2
geoportal-harvester-engine
Esri :: Geoportal Server :: Harvester :: Application :: Engine
diff --git a/geoportal-application/geoportal-harvester-war/pom.xml b/geoportal-application/geoportal-harvester-war/pom.xml
index 00aa94749..cabc9276e 100644
--- a/geoportal-application/geoportal-harvester-war/pom.xml
+++ b/geoportal-application/geoportal-harvester-war/pom.xml
@@ -4,7 +4,7 @@
geoportal-application
com.esri.geoportal
- 2.7.1
+ 2.7.2
geoportal-harvester-war
war
@@ -89,12 +89,27 @@
org.springframework.security.oauth
spring-security-oauth2
- 2.5.1.RELEASE
+ 2.5.2.RELEASE
org.springframework.security
spring-security-jwt
1.1.1.RELEASE
+
+
+ org.springframework.security
+ spring-security-oauth2-client
+ ${springsecurity.version}
+
+
+ org.springframework.security
+ spring-security-oauth2-jose
+ ${springsecurity.version}
+
+
+ org.springframework.security
+ spring-security-oauth2-core
+ ${springsecurity.version}
diff --git a/geoportal-application/geoportal-harvester-war/src/main/java/com/esri/geoportal/base/security/ArcGISOAuth2LoginConfig.java b/geoportal-application/geoportal-harvester-war/src/main/java/com/esri/geoportal/base/security/ArcGISOAuth2LoginConfig.java
new file mode 100644
index 000000000..e0814b06b
--- /dev/null
+++ b/geoportal-application/geoportal-harvester-war/src/main/java/com/esri/geoportal/base/security/ArcGISOAuth2LoginConfig.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2024 cont_anki.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.esri.geoportal.base.security;
+
+
+import java.util.Arrays;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.FormHttpMessageConverter;
+import org.springframework.security.oauth2.client.endpoint.DefaultAuthorizationCodeTokenResponseClient;
+import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient;
+import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest;
+import org.springframework.security.oauth2.client.http.OAuth2ErrorResponseErrorHandler;
+import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
+import org.springframework.security.oauth2.core.http.converter.OAuth2AccessTokenResponseHttpMessageConverter;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ *
+ * @author cont_anki
+ */
+@Configuration
+public class ArcGISOAuth2LoginConfig {
+
+
+ @Bean
+ public OAuth2AccessTokenResponseClient arcgisTokenResponseClient() {
+ OAuth2AccessTokenResponseHttpMessageConverter tokenResponseHttpMessageConverter =
+ new OAuth2AccessTokenResponseHttpMessageConverter();
+ tokenResponseHttpMessageConverter.setTokenResponseConverter(new CustomAccessTokenResponseConverter());
+
+ RestTemplate restTemplate = new RestTemplate(Arrays.asList(
+ new FormHttpMessageConverter(), tokenResponseHttpMessageConverter));
+ restTemplate.setErrorHandler(new OAuth2ErrorResponseErrorHandler());
+
+ DefaultAuthorizationCodeTokenResponseClient tokenResponseClient = new DefaultAuthorizationCodeTokenResponseClient();
+ tokenResponseClient.setRestOperations(restTemplate);
+
+ return tokenResponseClient;
+ }
+
+ @Bean
+ public DefaultOAuth2UserService customUserService()
+ {
+ DefaultOAuth2UserService userService = new DefaultOAuth2UserService();
+
+ userService.setRequestEntityConverter(new CustomRequestEntityConverter());
+
+ return userService;
+
+ }
+
+
+}
+
+
+
+
diff --git a/geoportal-application/geoportal-harvester-war/src/main/java/com/esri/geoportal/base/security/CustomAccessTokenResponseConverter.java b/geoportal-application/geoportal-harvester-war/src/main/java/com/esri/geoportal/base/security/CustomAccessTokenResponseConverter.java
new file mode 100644
index 000000000..dbbec247d
--- /dev/null
+++ b/geoportal-application/geoportal-harvester-war/src/main/java/com/esri/geoportal/base/security/CustomAccessTokenResponseConverter.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2024 cont_anki.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.esri.geoportal.base.security;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.security.oauth2.core.OAuth2AccessToken;
+import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse;
+import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
+import org.springframework.util.StringUtils;
+
+/**
+ *
+ * @author cont_anki
+ */
+public class CustomAccessTokenResponseConverter implements Converter