diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs index 019ef0469e..82679b10b7 100644 --- a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs @@ -15,6 +15,7 @@ namespace Volo.Abp.Identity.AspNetCore { builder .AddDefaultTokenProviders() + .AddTokenProvider(LinkUserTokenProviderConsts.LinkUserTokenProviderName) .AddSignInManager(); }); } diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider.cs b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider.cs new file mode 100644 index 0000000000..2fadb53a83 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.DataProtection; +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace Volo.Abp.Identity.AspNetCore +{ + public class LinkUserTokenProvider : DataProtectorTokenProvider + { + public LinkUserTokenProvider( + IDataProtectionProvider dataProtectionProvider, + IOptions options, + ILogger> logger) + : base(dataProtectionProvider, options, logger) + { + + } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/LinkUserTokenProviderConsts.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/LinkUserTokenProviderConsts.cs new file mode 100644 index 0000000000..044f034e46 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/LinkUserTokenProviderConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.Identity +{ + public static class LinkUserTokenProviderConsts + { + public static string LinkUserTokenProviderName { get; set; } = "AbpLinkUser"; + + public static string LinkUserTokenPurpose { get; set; } = "AbpLinkUserLogin"; + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs index c37889a897..5dfdf2944d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs @@ -33,8 +33,7 @@ namespace Microsoft.Extensions.DependencyInjection return services .AddIdentityCore(setupAction) .AddRoles() - .AddClaimsPrincipalFactory() - .AddTokenProvider(LinkUserTokenProvider.LinkUserTokenProviderName); + .AddClaimsPrincipalFactory(); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs index d4c89a6ad5..9320a2e572 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using System.Text.Encodings.Web; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Services; @@ -128,10 +129,12 @@ namespace Volo.Abp.Identity using (CurrentTenant.Change(targetLinkUser.TenantId)) { var user = await UserManager.GetByIdAsync(targetLinkUser.UserId); - return await UserManager.GenerateUserTokenAsync( + var token = await UserManager.GenerateUserTokenAsync( user, - LinkUserTokenProvider.LinkUserTokenProviderName, - LinkUserTokenProvider.LinkUserTokenPurpose); + LinkUserTokenProviderConsts.LinkUserTokenProviderName, + LinkUserTokenProviderConsts.LinkUserTokenPurpose); + + return UrlEncoder.Default.Encode(token); } } @@ -142,8 +145,8 @@ namespace Volo.Abp.Identity var user = await UserManager.GetByIdAsync(targetLinkUser.UserId); return await UserManager.VerifyUserTokenAsync( user, - LinkUserTokenProvider.LinkUserTokenProviderName, - LinkUserTokenProvider.LinkUserTokenPurpose, + LinkUserTokenProviderConsts.LinkUserTokenProviderName, + LinkUserTokenProviderConsts.LinkUserTokenPurpose, token); } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/LinkUserTokenProvider.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/LinkUserTokenProvider.cs deleted file mode 100644 index 706c045578..0000000000 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/LinkUserTokenProvider.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; - -namespace Volo.Abp.Identity -{ - public class LinkUserTokenProvider : TotpSecurityStampBasedTokenProvider - { - public const string LinkUserTokenProviderName = "AbpLinkUser"; - - public const string LinkUserTokenPurpose = "AbpLinkUserLogin"; - - public override Task CanGenerateTwoFactorTokenAsync(UserManager manager, IdentityUser user) - { - return Task.FromResult(false); - } - } -} diff --git a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider_Tests.cs b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider_Tests.cs index 2791de9a4f..fe87b67d72 100644 --- a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider_Tests.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.Identity.AspNetCore var identityOptions = GetRequiredService>().Value; identityOptions.Tokens.ProviderMap.ShouldContain(x => - x.Key == LinkUserTokenProvider.LinkUserTokenProviderName && + x.Key == LinkUserTokenProviderConsts.LinkUserTokenProviderName && x.Value.ProviderType == typeof(LinkUserTokenProvider)); } }