diff --git a/pom.xml b/pom.xml
index 18b8c7bcb4..63555d8492 100644
--- a/pom.xml
+++ b/pom.xml
@@ -195,6 +195,10 @@
org.jenkins-ci.plugins
credentials
+
+ org.jenkins-ci.plugins
+ plain-credentials
+
org.jenkins-ci.plugins
script-security
diff --git a/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java b/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java
index ae0e73766e..c8f77a1379 100644
--- a/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java
+++ b/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java
@@ -71,6 +71,7 @@
import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.URIish;
import org.jenkinsci.plugins.gitclient.cgit.GitCommandsExecutor;
+import org.jenkinsci.plugins.plaincredentials.StringCredentials;
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted;
import org.kohsuke.stapler.framework.io.WriterOutputStream;
@@ -2150,6 +2151,15 @@ private String launchCommandWithCredentials(
env = new EnvVars(env);
env.put("GIT_ASKPASS", askpass.toAbsolutePath().toString());
env.put("SSH_ASKPASS", askpass.toAbsolutePath().toString());
+
+ } else if (credentials instanceof StringCredentials) {
+ var stringCred = (StringCredentials) credentials;
+ listener.getLogger().println("using GIT_CONFIG to set token header " + stringCred.getDescription());
+
+ env = new EnvVars(env);
+ env.put("GIT_CONFIG_COUNT", "1");
+ env.put("GIT_CONFIG_KEY_0", "http.extraHeader");
+ env.put("GIT_CONFIG_VALUE_0", "Authorization: Bearer " + stringCred.getSecret());
}
if ("http".equalsIgnoreCase(url.getScheme()) || "https".equalsIgnoreCase(url.getScheme())) {
diff --git a/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java b/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java
index bc8fd0638f..7579061155 100644
--- a/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java
+++ b/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java
@@ -23,6 +23,7 @@
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.URIish;
+import org.jenkinsci.plugins.plaincredentials.StringCredentials;
/**
* Interface to Git functionality.
@@ -47,7 +48,8 @@ public interface GitClient {
*/
CredentialsMatcher CREDENTIALS_MATCHER = CredentialsMatchers.anyOf(
CredentialsMatchers.instanceOf(StandardUsernamePasswordCredentials.class),
- CredentialsMatchers.instanceOf(SSHUserPrivateKey.class));
+ CredentialsMatchers.instanceOf(SSHUserPrivateKey.class),
+ CredentialsMatchers.instanceOf(StringCredentials.class));
/**
* Remove all credentials from the client.