diff --git a/src/Core/Auth/Services/Implementations/OpaqueKeyExchangeService.cs b/src/Core/Auth/Services/Implementations/OpaqueKeyExchangeService.cs
index d6e5ffc915..60722690d8 100644
--- a/src/Core/Auth/Services/Implementations/OpaqueKeyExchangeService.cs
+++ b/src/Core/Auth/Services/Implementations/OpaqueKeyExchangeService.cs
@@ -197,7 +197,11 @@ public class OpaqueKeyExchangeService : IOpaqueKeyExchangeService
             await _distributedCache.SetAsync(
                 string.Format(LOGIN_SESSION_KEY, sessionId),
                 Encoding.ASCII.GetBytes(JsonSerializer.Serialize(loginSession)),
-                _distributedCacheEntryOptions);
+                new DistributedCacheEntryOptions()
+                {
+                    // Our login sessions are 5 minutes long so if a user needs to accomplish 2FA this ensures the user has time to do so.
+                    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
+                });
 
             return true;
         }
diff --git a/src/Identity/IdentityServer/RequestValidators/OpaqueKeyExchangeGrantValidator.cs b/src/Identity/IdentityServer/RequestValidators/OpaqueKeyExchangeGrantValidator.cs
index eb12eeeaac..5016d1f4bd 100644
--- a/src/Identity/IdentityServer/RequestValidators/OpaqueKeyExchangeGrantValidator.cs
+++ b/src/Identity/IdentityServer/RequestValidators/OpaqueKeyExchangeGrantValidator.cs
@@ -1,7 +1,6 @@
 using System.Security.Claims;
 using Bit.Core;
 using Bit.Core.AdminConsole.Services;
-using Bit.Core.Auth.Models.Business.Tokenables;
 using Bit.Core.Auth.Repositories;
 using Bit.Core.Auth.Services;
 using Bit.Core.Context;
@@ -9,7 +8,6 @@ using Bit.Core.Entities;
 using Bit.Core.Repositories;
 using Bit.Core.Services;
 using Bit.Core.Settings;
-using Bit.Core.Tokens;
 using Duende.IdentityServer.Models;
 using Duende.IdentityServer.Validation;
 using Microsoft.AspNetCore.Identity;
@@ -19,8 +17,8 @@ namespace Bit.Identity.IdentityServer.RequestValidators;
 public class OpaqueKeyExchangeGrantValidator : BaseRequestValidator<ExtensionGrantValidationContext>, IExtensionGrantValidator
 {
     public const string GrantType = "opaque-ke";
-    private IUserRepository userRepository;
-    private IOpaqueKeyExchangeService opaqueKeyExchangeService;
+    private readonly IOpaqueKeyExchangeService _opaqueKeyExchangeService;
+    private readonly IFeatureService _featureService;
 
     public OpaqueKeyExchangeGrantValidator(
         UserManager<User> userManager,
@@ -36,7 +34,6 @@ public class OpaqueKeyExchangeGrantValidator : BaseRequestValidator<ExtensionGra
         ISsoConfigRepository ssoConfigRepository,
         IUserRepository userRepository,
         IPolicyService policyService,
-        IDataProtectorTokenFactory<WebAuthnLoginAssertionOptionsTokenable> assertionOptionsDataProtector,
         IFeatureService featureService,
         IUserDecryptionOptionsBuilder userDecryptionOptionsBuilder,
         IOpaqueKeyExchangeService opaqueKeyExchangeService)
@@ -57,14 +54,19 @@ public class OpaqueKeyExchangeGrantValidator : BaseRequestValidator<ExtensionGra
             ssoConfigRepository,
             userDecryptionOptionsBuilder)
     {
-        this.userRepository = userRepository;
-        this.opaqueKeyExchangeService = opaqueKeyExchangeService;
+        _opaqueKeyExchangeService = opaqueKeyExchangeService;
     }
 
     string IExtensionGrantValidator.GrantType => "opaque-ke";
 
     public async Task ValidateAsync(ExtensionGrantValidationContext context)
     {
+        if (!_featureService.IsEnabled(FeatureFlagKeys.OpaqueKeyExchange))
+        {
+            context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);
+            return;
+        }
+
         var sessionId = context.Request.Raw.Get("sessionId");
         if (string.IsNullOrWhiteSpace(sessionId))
         {
@@ -72,7 +74,7 @@ public class OpaqueKeyExchangeGrantValidator : BaseRequestValidator<ExtensionGra
             return;
         }
 
-        var user = await opaqueKeyExchangeService.GetUserForAuthenticatedSession(Guid.Parse(sessionId));
+        var user = await _opaqueKeyExchangeService.GetUserForAuthenticatedSession(Guid.Parse(sessionId));
         if (user == null)
         {
             context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);
@@ -104,7 +106,7 @@ public class OpaqueKeyExchangeGrantValidator : BaseRequestValidator<ExtensionGra
             identityProvider: Constants.IdentityProvider,
             claims: claims.Count > 0 ? claims : null,
             customResponse: customResponse);
-        await opaqueKeyExchangeService.ClearAuthenticationSession(Guid.Parse(context.Request.Raw.Get("sessionId")));
+        await _opaqueKeyExchangeService.ClearAuthenticationSession(Guid.Parse(context.Request.Raw.Get("sessionId")));
     }
 
     protected override ClaimsPrincipal GetSubject(ExtensionGrantValidationContext context)