From 14b103668b267e96160cac8a7cd831f743a35efa Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 31 Jul 2023 16:38:00 +0800 Subject: [PATCH] Add `IAbpAccessTokenProvider`. --- .../MauiBlazor/IAbpMauiAccessTokenProvider.cs | 8 ----- .../MauiBlazorAbpAccessTokenProvider.cs | 14 ++++++++ ...delRemoteServiceHttpClientAuthenticator.cs | 24 +++---------- .../NullAbpMauiAccessTokenProvider.cs | 13 ------- .../AbpHttpClientIdentityModelWebModule.cs | 8 +++-- .../Web/HttpContextAbpAccessTokenProvider.cs | 29 ++++++++++++++++ ...delRemoteServiceHttpClientAuthenticator.cs | 23 ++++--------- ...delRemoteServiceHttpClientAuthenticator.cs | 34 ++++--------------- .../WebAssemblyAbpAccessTokenProvider.cs | 34 +++++++++++++++++++ .../Authentication/IAbpAccessTokenProvider.cs | 8 +++++ .../NullAbpAccessTokenProvider.cs | 12 +++++++ 11 files changed, 120 insertions(+), 87 deletions(-) delete mode 100644 framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/IAbpMauiAccessTokenProvider.cs create mode 100644 framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs delete mode 100644 framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/NullAbpMauiAccessTokenProvider.cs create mode 100644 framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs create mode 100644 framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs create mode 100644 framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs create mode 100644 framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/IAbpMauiAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/IAbpMauiAccessTokenProvider.cs deleted file mode 100644 index 0c257b090c..0000000000 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/IAbpMauiAccessTokenProvider.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Threading.Tasks; - -namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor; - -public interface IAbpMauiAccessTokenProvider -{ - Task GetAccessTokenAsync(); -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs new file mode 100644 index 0000000000..8afbcbafed --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs @@ -0,0 +1,14 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.Authentication; + +namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor; + +[Dependency(ReplaceServices = true)] +public class MauiBlazorAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency +{ + public virtual Task GetTokenAsync() + { + return Task.FromResult(null as string); + } +} diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiIBlazorIdentityModelRemoteServiceHttpClientAuthenticator.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiIBlazorIdentityModelRemoteServiceHttpClientAuthenticator.cs index ba36de1d77..b1277373fa 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiIBlazorIdentityModelRemoteServiceHttpClientAuthenticator.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiIBlazorIdentityModelRemoteServiceHttpClientAuthenticator.cs @@ -1,8 +1,5 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using IdentityModel.Client; -using JetBrains.Annotations; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.Authentication; using Volo.Abp.IdentityModel; @@ -12,22 +9,21 @@ namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor; [Dependency(ReplaceServices = true)] public class MauiBlazorIdentityModelRemoteServiceHttpClientAuthenticator : IdentityModelRemoteServiceHttpClientAuthenticator { - [CanBeNull] - protected IAbpMauiAccessTokenProvider AbpMauiAccessTokenProvider { get; } + protected IAbpAccessTokenProvider AccessTokenProvider { get; } public MauiBlazorIdentityModelRemoteServiceHttpClientAuthenticator( IIdentityModelAuthenticationService identityModelAuthenticationService, - IServiceProvider serviceProvider) + IAbpAccessTokenProvider abpAccessTokenProvider) : base(identityModelAuthenticationService) { - AbpMauiAccessTokenProvider = serviceProvider.GetService(); + AccessTokenProvider = abpAccessTokenProvider; } public async override Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) { if (context.RemoteService.GetUseCurrentAccessToken() != false) { - var accessToken = await GetAccessTokenFromAccessTokenProviderOrNullAsync(); + var accessToken = await AccessTokenProvider.GetTokenAsync(); if (accessToken != null) { context.Request.SetBearerToken(accessToken); @@ -37,14 +33,4 @@ public class MauiBlazorIdentityModelRemoteServiceHttpClientAuthenticator : Ident await base.Authenticate(context); } - - protected virtual async Task GetAccessTokenFromAccessTokenProviderOrNullAsync() - { - if (AbpMauiAccessTokenProvider == null) - { - return null; - } - - return await AbpMauiAccessTokenProvider.GetAccessTokenAsync(); - } } diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/NullAbpMauiAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/NullAbpMauiAccessTokenProvider.cs deleted file mode 100644 index ae6ecd949f..0000000000 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/NullAbpMauiAccessTokenProvider.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor; - -[Dependency(TryRegister = true)] -public class NullAbpMauiAccessTokenProvider : IAbpMauiAccessTokenProvider -{ - public Task GetAccessTokenAsync() - { - return Task.FromResult(null as string); - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/AbpHttpClientIdentityModelWebModule.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/AbpHttpClientIdentityModelWebModule.cs index 44959fbb82..1478193bf6 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/AbpHttpClientIdentityModelWebModule.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/AbpHttpClientIdentityModelWebModule.cs @@ -1,4 +1,5 @@ -using Volo.Abp.Modularity; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; namespace Volo.Abp.Http.Client.IdentityModel.Web; @@ -7,5 +8,8 @@ namespace Volo.Abp.Http.Client.IdentityModel.Web; )] public class AbpHttpClientIdentityModelWebModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddHttpContextAccessor(); + } } diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs new file mode 100644 index 0000000000..97d88bd3b0 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Http; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.Authentication; + +namespace Volo.Abp.Http.Client.IdentityModel.Web; + +[Dependency(ReplaceServices = true)] +public class HttpContextAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency +{ + protected IHttpContextAccessor HttpContextAccessor { get; } + + public HttpContextAbpAccessTokenProvider(IHttpContextAccessor httpContextAccessor) + { + HttpContextAccessor = httpContextAccessor; + } + + public virtual async Task GetTokenAsync() + { + var httpContext = HttpContextAccessor?.HttpContext; + if (httpContext == null) + { + return null; + } + + return await httpContext.GetTokenAsync("access_token"); + } +} diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs index 6ae44a0943..364134348b 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs @@ -1,7 +1,5 @@ using System.Threading.Tasks; using IdentityModel.Client; -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Http; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.Authentication; using Volo.Abp.IdentityModel; @@ -11,19 +9,21 @@ namespace Volo.Abp.Http.Client.IdentityModel.Web; [Dependency(ReplaceServices = true)] public class HttpContextIdentityModelRemoteServiceHttpClientAuthenticator : IdentityModelRemoteServiceHttpClientAuthenticator { - public IHttpContextAccessor HttpContextAccessor { get; set; } + protected IAbpAccessTokenProvider AccessTokenProvider { get; } public HttpContextIdentityModelRemoteServiceHttpClientAuthenticator( - IIdentityModelAuthenticationService identityModelAuthenticationService) + IIdentityModelAuthenticationService identityModelAuthenticationService, + IAbpAccessTokenProvider accessTokenProvider) : base(identityModelAuthenticationService) { + AccessTokenProvider = accessTokenProvider; } - public override async Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) + public async override Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) { if (context.RemoteService.GetUseCurrentAccessToken() != false) { - var accessToken = await GetAccessTokenFromHttpContextOrNullAsync(); + var accessToken = await AccessTokenProvider.GetTokenAsync(); if (accessToken != null) { context.Request.SetBearerToken(accessToken); @@ -33,15 +33,4 @@ public class HttpContextIdentityModelRemoteServiceHttpClientAuthenticator : Iden await base.Authenticate(context); } - - protected virtual async Task GetAccessTokenFromHttpContextOrNullAsync() - { - var httpContext = HttpContextAccessor?.HttpContext; - if (httpContext == null) - { - return null; - } - - return await httpContext.GetTokenAsync("access_token"); - } } diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs index 846cc6f3a3..c16317e376 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs @@ -1,9 +1,5 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using IdentityModel.Client; -using JetBrains.Annotations; -using Microsoft.AspNetCore.Components.WebAssembly.Authentication; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.Authentication; using Volo.Abp.IdentityModel; @@ -14,22 +10,21 @@ namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly; public class AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator : IdentityModelRemoteServiceHttpClientAuthenticator { - [CanBeNull] - protected IAccessTokenProvider AccessTokenProvider { get; } + protected IAbpAccessTokenProvider AccessTokenProvider { get; } public AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator( IIdentityModelAuthenticationService identityModelAuthenticationService, - IServiceProvider serviceProvider) + IAbpAccessTokenProvider accessTokenProvider) : base(identityModelAuthenticationService) { - AccessTokenProvider = serviceProvider.GetService(); + AccessTokenProvider = accessTokenProvider; } - public override async Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) + public async override Task Authenticate(RemoteServiceHttpClientAuthenticateContext context) { if (context.RemoteService.GetUseCurrentAccessToken() != false) { - var accessToken = await GetAccessTokenFromAccessTokenProviderOrNullAsync(); + var accessToken = await AccessTokenProvider.GetTokenAsync(); if (accessToken != null) { context.Request.SetBearerToken(accessToken); @@ -39,21 +34,4 @@ public class AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticato await base.Authenticate(context); } - - protected virtual async Task GetAccessTokenFromAccessTokenProviderOrNullAsync() - { - if (AccessTokenProvider == null) - { - return null; - } - - var result = await AccessTokenProvider.RequestAccessToken(); - if (result.Status != AccessTokenResultStatus.Success) - { - return null; - } - - result.TryGetToken(out var token); - return token.Value; - } } diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs new file mode 100644 index 0000000000..d0a68cdb7c --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs @@ -0,0 +1,34 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.Authentication; + +namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly; + +[Dependency(ReplaceServices = true)] +public class WebAssemblyAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency +{ + protected IAccessTokenProvider AccessTokenProvider { get; } + + public WebAssemblyAbpAccessTokenProvider(IAccessTokenProvider accessTokenProvider) + { + AccessTokenProvider = accessTokenProvider; + } + + public virtual async Task GetTokenAsync() + { + if (AccessTokenProvider == null) + { + return null; + } + + var result = await AccessTokenProvider.RequestAccessToken(); + if (result.Status != AccessTokenResultStatus.Success) + { + return null; + } + + result.TryGetToken(out var token); + return token.Value; + } +} diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs new file mode 100644 index 0000000000..a4e9e650e3 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.Http.Client.Authentication; + +public interface IAbpAccessTokenProvider +{ + Task GetTokenAsync(); +} diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs new file mode 100644 index 0000000000..6bd7e6344b --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Http.Client.Authentication; + +public class NullAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency +{ + public Task GetTokenAsync() + { + return Task.FromResult(null as string); + } +}