diff --git a/src/Core/Auth/Identity/TemporaryDuoWebV4SDKService.cs b/src/Core/Auth/Identity/TemporaryDuoWebV4SDKService.cs
index 9ddd7958d2..f78abdfd13 100644
--- a/src/Core/Auth/Identity/TemporaryDuoWebV4SDKService.cs
+++ b/src/Core/Auth/Identity/TemporaryDuoWebV4SDKService.cs
@@ -55,7 +55,10 @@ public class TemporaryDuoWebV4SDKService : ITemporaryDuoWebV4SDKService
{
if (!HasProperMetaData(provider))
{
- return null;
+ if (!HasProperMetaData_SDKV2(provider))
+ {
+ return null;
+ }
}
@@ -82,7 +85,10 @@ public class TemporaryDuoWebV4SDKService : ITemporaryDuoWebV4SDKService
{
if (!HasProperMetaData(provider))
{
- return false;
+ if (!HasProperMetaData_SDKV2(provider))
+ {
+ return false;
+ }
}
var duoClient = await BuildDuoClientAsync(provider);
@@ -114,6 +120,29 @@ public class TemporaryDuoWebV4SDKService : ITemporaryDuoWebV4SDKService
provider.MetaData.ContainsKey("ClientSecret") && provider.MetaData.ContainsKey("Host");
}
+ ///
+ /// Checks if the metadata for SDK V2 is present.
+ /// Transitional method to support Duo during v4 database rename
+ ///
+ /// The TwoFactorProvider object to check.
+ /// True if the provider has the proper metadata; otherwise, false.
+ private bool HasProperMetaData_SDKV2(TwoFactorProvider provider)
+ {
+ if (provider?.MetaData != null &&
+ provider.MetaData.TryGetValue("IKey", out var iKey) &&
+ provider.MetaData.TryGetValue("SKey", out var sKey) &&
+ provider.MetaData.ContainsKey("Host"))
+ {
+ provider.MetaData.Add("ClientId", iKey);
+ provider.MetaData.Add("ClientSecret", sKey);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
///
/// Generates a Duo.Client object for use with Duo SDK v4. This combines the health check and the client generation
///