Browse Source

Merge pull request #17236 from abpframework/IAbpAccessTokenProvider

pull/17257/head
maliming 3 years ago
committed by GitHub
parent
commit
327849eda5
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/IAbpMauiAccessTokenProvider.cs
  2. 14
      framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiBlazorAbpAccessTokenProvider.cs
  3. 24
      framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/MauiIBlazorIdentityModelRemoteServiceHttpClientAuthenticator.cs
  4. 13
      framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/NullAbpMauiAccessTokenProvider.cs
  5. 8
      framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/AbpHttpClientIdentityModelWebModule.cs
  6. 29
      framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextAbpAccessTokenProvider.cs
  7. 23
      framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo/Abp/Http/Client/IdentityModel/Web/HttpContextIdentityModelRemoteServiceHttpClientAuthenticator.cs
  8. 34
      framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/AccessTokenProviderIdentityModelRemoteServiceHttpClientAuthenticator.cs
  9. 34
      framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/WebAssemblyAbpAccessTokenProvider.cs
  10. 8
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs
  11. 12
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs

8
framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/IAbpMauiAccessTokenProvider.cs

@ -1,8 +0,0 @@
using System.Threading.Tasks;
namespace Volo.Abp.Http.Client.IdentityModel.MauiBlazor;
public interface IAbpMauiAccessTokenProvider
{
Task<string> GetAccessTokenAsync();
}

14
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<string> GetTokenAsync()
{
return Task.FromResult(null as string);
}
}

24
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<IAbpMauiAccessTokenProvider>();
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<string> GetAccessTokenFromAccessTokenProviderOrNullAsync()
{
if (AbpMauiAccessTokenProvider == null)
{
return null;
}
return await AbpMauiAccessTokenProvider.GetAccessTokenAsync();
}
}

13
framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo/Abp/Http/Client/IdentityModel/MauiBlazor/NullAbpMauiAccessTokenProvider.cs

@ -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<string> GetAccessTokenAsync()
{
return Task.FromResult(null as string);
}
}

8
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();
}
}

29
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<string> GetTokenAsync()
{
var httpContext = HttpContextAccessor?.HttpContext;
if (httpContext == null)
{
return null;
}
return await httpContext.GetTokenAsync("access_token");
}
}

23
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<string> GetAccessTokenFromHttpContextOrNullAsync()
{
var httpContext = HttpContextAccessor?.HttpContext;
if (httpContext == null)
{
return null;
}
return await httpContext.GetTokenAsync("access_token");
}
}

34
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<IAccessTokenProvider>();
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<string> 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;
}
}

34
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<string> 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;
}
}

8
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<string> GetTokenAsync();
}

12
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<string> GetTokenAsync()
{
return Task.FromResult(null as string);
}
}
Loading…
Cancel
Save