diff --git a/src/Core/Constants.cs b/src/Core/Constants.cs index 3769cafc5c..8527aa0694 100644 --- a/src/Core/Constants.cs +++ b/src/Core/Constants.cs @@ -23,6 +23,7 @@ public static class Constants public const string Fido2KeyCipherMinimumVersion = "2023.10.0"; public const string SSHKeyCipherMinimumVersion = "2024.12.0"; + public const string DenyLegacyUserMinimumVersion = "2025.6.0"; /// /// Used by IdentityServer to identify our own provider. diff --git a/src/Identity/IdentityServer/RequestValidators/BaseRequestValidator.cs b/src/Identity/IdentityServer/RequestValidators/BaseRequestValidator.cs index 45c0c26b17..dd4592aa0d 100644 --- a/src/Identity/IdentityServer/RequestValidators/BaseRequestValidator.cs +++ b/src/Identity/IdentityServer/RequestValidators/BaseRequestValidator.cs @@ -193,7 +193,7 @@ public abstract class BaseRequestValidator where T : class protected async Task FailAuthForLegacyUserAsync(User user, T context) { await BuildErrorResultAsync( - $"Encryption key migration is required. Please log in to the web vault at {_globalSettings.BaseServiceUri.VaultWithHash}", + $"Legacy encryption without a userkey is no longer supported. To recover your account, please contact support", false, context, user); } diff --git a/src/Identity/IdentityServer/RequestValidators/CustomTokenRequestValidator.cs b/src/Identity/IdentityServer/RequestValidators/CustomTokenRequestValidator.cs index 6f2d81bd1b..7d468fafa8 100644 --- a/src/Identity/IdentityServer/RequestValidators/CustomTokenRequestValidator.cs +++ b/src/Identity/IdentityServer/RequestValidators/CustomTokenRequestValidator.cs @@ -27,6 +27,7 @@ public class CustomTokenRequestValidator : BaseRequestValidator _userManager; private readonly IUpdateInstallationCommand _updateInstallationCommand; + private readonly Version _denyLegacyUserMinimumVersion = new(Constants.DenyLegacyUserMinimumVersion); public CustomTokenRequestValidator( UserManager userManager, @@ -73,7 +74,7 @@ public class CustomTokenRequestValidator : BaseRequestValidator= _denyLegacyUserMinimumVersion)) { await FailAuthForLegacyUserAsync(null, context); return; diff --git a/test/Identity.IntegrationTest/Endpoints/IdentityServerTests.cs b/test/Identity.IntegrationTest/Endpoints/IdentityServerTests.cs index 80f2b5e20b..e63858117f 100644 --- a/test/Identity.IntegrationTest/Endpoints/IdentityServerTests.cs +++ b/test/Identity.IntegrationTest/Endpoints/IdentityServerTests.cs @@ -238,7 +238,7 @@ public class IdentityServerTests : IClassFixture } [Theory, BitAutoData, RegisterFinishRequestModelCustomize] - public async Task TokenEndpoint_GrantTypeClientCredentials_AsLegacyUser_NotOnWebClient_Fails( + public async Task TokenEndpoint_GrantTypeClientCredentials_AsLegacyUser_Fails( RegisterFinishRequestModel model, string deviceId) { @@ -277,7 +277,7 @@ public class IdentityServerTests : IClassFixture var errorBody = await AssertHelper.AssertResponseTypeIs(context); var error = AssertHelper.AssertJsonProperty(errorBody.RootElement, "ErrorModel", JsonValueKind.Object); var message = AssertHelper.AssertJsonProperty(error, "Message", JsonValueKind.String).GetString(); - Assert.StartsWith("Encryption key migration is required.", message); + Assert.StartsWith("Legacy encryption without a userkey is no longer supported.", message); } diff --git a/test/Identity.Test/IdentityServer/BaseRequestValidatorTests.cs b/test/Identity.Test/IdentityServer/BaseRequestValidatorTests.cs index 9eb17da88a..aab98a583c 100644 --- a/test/Identity.Test/IdentityServer/BaseRequestValidatorTests.cs +++ b/test/Identity.Test/IdentityServer/BaseRequestValidatorTests.cs @@ -373,8 +373,7 @@ public class BaseRequestValidatorTests // Assert Assert.True(context.GrantResult.IsError); var errorResponse = (ErrorResponseModel)context.GrantResult.CustomResponse["ErrorModel"]; - var expectedMessage = $"Encryption key migration is required. Please log in to the web " + - $"vault at {_globalSettings.BaseServiceUri.VaultWithHash}"; + var expectedMessage = "Legacy encryption without a userkey is no longer supported. To recover your account, please contact support"; Assert.Equal(expectedMessage, errorResponse.Message); }