diff --git a/src/KubernetesClient.Classic/KubernetesClient.Classic.csproj b/src/KubernetesClient.Classic/KubernetesClient.Classic.csproj
index 8d5ea9471..55695f7d9 100644
--- a/src/KubernetesClient.Classic/KubernetesClient.Classic.csproj
+++ b/src/KubernetesClient.Classic/KubernetesClient.Classic.csproj
@@ -109,7 +109,6 @@
-
diff --git a/src/KubernetesClient/Authentication/GcpTokenProvider.cs b/src/KubernetesClient/Authentication/GcpTokenProvider.cs
deleted file mode 100644
index d81713b89..000000000
--- a/src/KubernetesClient/Authentication/GcpTokenProvider.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using k8s.Exceptions;
-using System.Diagnostics;
-using System.Net.Http.Headers;
-
-namespace k8s.Authentication
-{
- public class GcpTokenProvider : ITokenProvider
- {
- private readonly string _gcloudCli;
- private string _token;
- private DateTime _expiry;
-
- public GcpTokenProvider(string gcloudCli)
- {
- _gcloudCli = gcloudCli;
- }
-
- public async Task GetAuthenticationHeaderAsync(CancellationToken cancellationToken)
- {
- if (DateTime.UtcNow.AddSeconds(30) > _expiry)
- {
- await RefreshToken().ConfigureAwait(false);
- }
-
- return new AuthenticationHeaderValue("Bearer", _token);
- }
-
- private async Task RefreshToken()
- {
- var process = new Process
- {
- StartInfo =
- {
- FileName = _gcloudCli,
- Arguments = "config config-helper --format=json",
- UseShellExecute = false,
- CreateNoWindow = true,
- RedirectStandardOutput = true,
- RedirectStandardError = true,
- },
- EnableRaisingEvents = true,
- };
- var tcs = new TaskCompletionSource();
- process.Exited += (sender, arg) =>
- {
- tcs.SetResult(true);
- };
- process.Start();
- var output = process.StandardOutput.ReadToEndAsync();
- var err = process.StandardError.ReadToEndAsync();
-
- await Task.WhenAll(tcs.Task, output, err).ConfigureAwait(false);
-
- if (process.ExitCode != 0)
- {
- throw new KubernetesClientException($"Unable to obtain a token via gcloud command. Error code {process.ExitCode}. \n {err}");
- }
-
- dynamic json = JsonSerializer.Deserialize(await output.ConfigureAwait(false), new
- {
- credential = new
- {
- access_token = "",
- token_expiry = DateTime.UtcNow,
- },
- }.GetType());
-
- _token = json.credential.access_token;
- _expiry = json.credential.token_expiry;
- }
- }
-}
diff --git a/src/KubernetesClient/KubernetesClientConfiguration.ConfigFile.cs b/src/KubernetesClient/KubernetesClientConfiguration.ConfigFile.cs
index 1449fe770..e74660bc9 100644
--- a/src/KubernetesClient/KubernetesClientConfiguration.ConfigFile.cs
+++ b/src/KubernetesClient/KubernetesClientConfiguration.ConfigFile.cs
@@ -384,45 +384,10 @@ private void SetUserDetails(K8SConfiguration k8SConfig, Context activeContext)
switch (userDetails.UserCredentials.AuthProvider.Name)
{
case "azure":
- {
- var config = userDetails.UserCredentials.AuthProvider.Config;
- if (config.ContainsKey("expires-on"))
- {
- var expiresOn = int.Parse(config["expires-on"]);
- DateTimeOffset expires;
- expires = DateTimeOffset.FromUnixTimeSeconds(expiresOn);
-
- if (DateTimeOffset.Compare(
- expires,
- DateTimeOffset.Now)
- <= 0)
- {
- var tenantId = config["tenant-id"];
- var clientId = config["client-id"];
- var apiServerId = config["apiserver-id"];
- var refresh = config["refresh-token"];
- var newToken = RenewAzureToken(
- tenantId,
- clientId,
- apiServerId,
- refresh);
- config["access-token"] = newToken;
- }
- }
-
- AccessToken = config["access-token"];
- userCredentialsFound = true;
- break;
- }
+ throw new Exception("Please use the https://github.com/Azure/kubelogin credential plugin instead. See https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins for further details`");
case "gcp":
- {
- // config
- var config = userDetails.UserCredentials.AuthProvider.Config;
- TokenProvider = new GcpTokenProvider(config["cmd-path"]);
- userCredentialsFound = true;
- break;
- }
+ throw new Exception("Please use the \"gke-gcloud-auth-plugin\" credential plugin instead. See https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke for further details");
case "oidc":
{
@@ -487,11 +452,6 @@ private void SetUserDetails(K8SConfiguration k8SConfig, Context activeContext)
}
}
- public static string RenewAzureToken(string tenantId, string clientId, string apiServerId, string refresh)
- {
- throw new KubeConfigException("Refresh not supported.");
- }
-
public static Process CreateRunnableExternalProcess(ExternalExecution config, EventHandler captureStdError = null)
{
if (config == null)
diff --git a/tests/KubernetesClient.Tests/GcpTokenProviderTests.cs b/tests/KubernetesClient.Tests/GcpTokenProviderTests.cs
deleted file mode 100644
index 54242256f..000000000
--- a/tests/KubernetesClient.Tests/GcpTokenProviderTests.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using FluentAssertions;
-using k8s.Authentication;
-using System;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace k8s.Tests
-{
- public class GcpTokenProviderTests
- {
- [OperatingSystemDependentFact(Exclude = OperatingSystems.OSX)]
- public async Task GetToken()
- {
- var isWindows = Environment.OSVersion.Platform == PlatformID.Win32NT;
- var cmd = Path.Combine(Directory.GetCurrentDirectory(), "assets", isWindows ? "mock-gcloud.cmd" : "mock-gcloud.sh");
- if (!isWindows)
- {
- System.Diagnostics.Process.Start("chmod", $"+x {cmd}").WaitForExit();
- }
-
- var sut = new GcpTokenProvider(cmd);
- var result = await sut.GetAuthenticationHeaderAsync(CancellationToken.None).ConfigureAwait(false);
- result.Scheme.Should().Be("Bearer");
- result.Parameter.Should().Be("ACCESS-TOKEN");
- }
- }
-}