Browse Source

Refactor DaprAppApiTokenValidator

pull/14015/head
Halil İbrahim Kalkan 4 years ago
parent
commit
a24baee639
  1. 35
      framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprAppApiTokenValidator.cs
  2. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprHttpContextExtensions.cs
  3. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/IDaprAppApiTokenValidator.cs
  4. 4
      framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/DaprApiTokenProvider.cs
  5. 4
      framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/IDaprApiTokenProvider.cs

35
framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprAppApiTokenValidator.cs

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization; using Volo.Abp.Authorization;
using Volo.Abp.Dapr; using Volo.Abp.Dapr;
@ -8,15 +9,23 @@ namespace Volo.Abp.AspNetCore.Mvc.Dapr;
public class DaprAppApiTokenValidator : IDaprAppApiTokenValidator, ISingletonDependency public class DaprAppApiTokenValidator : IDaprAppApiTokenValidator, ISingletonDependency
{ {
public virtual void CheckDaprAppApiToken(HttpContext httpContext) protected IHttpContextAccessor HttpContextAccessor { get; }
protected HttpContext HttpContext => GetHttpContext();
public DaprAppApiTokenValidator(IHttpContextAccessor httpContextAccessor)
{
HttpContextAccessor = httpContextAccessor;
}
public virtual void CheckDaprAppApiToken()
{ {
var expectedAppApiToken = GetConfiguredAppApiToken(httpContext); var expectedAppApiToken = GetConfiguredAppApiToken();
if (expectedAppApiToken.IsNullOrWhiteSpace()) if (expectedAppApiToken.IsNullOrWhiteSpace())
{ {
return; return;
} }
var headerAppApiToken = GetDaprAppApiTokenOrNull(httpContext); var headerAppApiToken = GetDaprAppApiTokenOrNull();
if (headerAppApiToken.IsNullOrWhiteSpace()) if (headerAppApiToken.IsNullOrWhiteSpace())
{ {
throw new AbpAuthorizationException("Expected Dapr App API Token is not provided! Dapr should set the 'dapr-api-token' HTTP header."); throw new AbpAuthorizationException("Expected Dapr App API Token is not provided! Dapr should set the 'dapr-api-token' HTTP header.");
@ -28,21 +37,21 @@ public class DaprAppApiTokenValidator : IDaprAppApiTokenValidator, ISingletonDep
} }
} }
public virtual bool IsValidDaprAppApiToken(HttpContext httpContext) public virtual bool IsValidDaprAppApiToken()
{ {
var expectedAppApiToken = GetConfiguredAppApiToken(httpContext); var expectedAppApiToken = GetConfiguredAppApiToken();
if (expectedAppApiToken.IsNullOrWhiteSpace()) if (expectedAppApiToken.IsNullOrWhiteSpace())
{ {
return true; return true;
} }
var headerAppApiToken = GetDaprAppApiTokenOrNull(httpContext); var headerAppApiToken = GetDaprAppApiTokenOrNull();
return expectedAppApiToken == headerAppApiToken; return expectedAppApiToken == headerAppApiToken;
} }
public virtual string? GetDaprAppApiTokenOrNull(HttpContext httpContext) public virtual string? GetDaprAppApiTokenOrNull()
{ {
string apiTokenHeader = httpContext.Request.Headers["dapr-api-token"]; string apiTokenHeader = HttpContext.Request.Headers["dapr-api-token"];
if (string.IsNullOrEmpty(apiTokenHeader) || apiTokenHeader.Length < 1) if (string.IsNullOrEmpty(apiTokenHeader) || apiTokenHeader.Length < 1)
{ {
return null; return null;
@ -51,12 +60,16 @@ public class DaprAppApiTokenValidator : IDaprAppApiTokenValidator, ISingletonDep
return apiTokenHeader; return apiTokenHeader;
} }
protected virtual string GetConfiguredAppApiToken(HttpContext httpContext) protected virtual string GetConfiguredAppApiToken()
{ {
var expectedAppApiToken = httpContext return HttpContext
.RequestServices .RequestServices
.GetRequiredService<IDaprApiTokenProvider>() .GetRequiredService<IDaprApiTokenProvider>()
.GetAppApiToken(); .GetAppApiToken();
return expectedAppApiToken; }
protected virtual HttpContext GetHttpContext()
{
return HttpContextAccessor.HttpContext ?? throw new AbpException("HttpContext is not available!");
} }
} }

6
framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/DaprHttpContextExtensions.cs

@ -10,7 +10,7 @@ public static class DaprHttpContextExtensions
httpContext httpContext
.RequestServices .RequestServices
.GetRequiredService<IDaprAppApiTokenValidator>() .GetRequiredService<IDaprAppApiTokenValidator>()
.CheckDaprAppApiToken(httpContext); .CheckDaprAppApiToken();
} }
public static bool IsValidDaprAppApiToken(this HttpContext httpContext) public static bool IsValidDaprAppApiToken(this HttpContext httpContext)
@ -18,7 +18,7 @@ public static class DaprHttpContextExtensions
return httpContext return httpContext
.RequestServices .RequestServices
.GetRequiredService<IDaprAppApiTokenValidator>() .GetRequiredService<IDaprAppApiTokenValidator>()
.IsValidDaprAppApiToken(httpContext); .IsValidDaprAppApiToken();
} }
public static string? GetDaprAppApiTokenOrNull(HttpContext httpContext) public static string? GetDaprAppApiTokenOrNull(HttpContext httpContext)
@ -26,6 +26,6 @@ public static class DaprHttpContextExtensions
return httpContext return httpContext
.RequestServices .RequestServices
.GetRequiredService<IDaprAppApiTokenValidator>() .GetRequiredService<IDaprAppApiTokenValidator>()
.GetDaprAppApiTokenOrNull(httpContext); .GetDaprAppApiTokenOrNull();
} }
} }

8
framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo/Abp/AspNetCore/Mvc/Dapr/IDaprAppApiTokenValidator.cs

@ -1,10 +1,8 @@
using Microsoft.AspNetCore.Http;
namespace Volo.Abp.AspNetCore.Mvc.Dapr; namespace Volo.Abp.AspNetCore.Mvc.Dapr;
public interface IDaprAppApiTokenValidator public interface IDaprAppApiTokenValidator
{ {
void CheckDaprAppApiToken(HttpContext httpContext); void CheckDaprAppApiToken();
bool IsValidDaprAppApiToken(HttpContext httpContext); bool IsValidDaprAppApiToken();
string? GetDaprAppApiTokenOrNull(HttpContext httpContext); string? GetDaprAppApiTokenOrNull();
} }

4
framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/DaprApiTokenProvider.cs

@ -12,12 +12,12 @@ public class DaprApiTokenProvider : IDaprApiTokenProvider, ISingletonDependency
Options = options.Value; Options = options.Value;
} }
public virtual string GetDaprApiToken() public virtual string? GetDaprApiToken()
{ {
return Options.DaprApiToken; return Options.DaprApiToken;
} }
public virtual string GetAppApiToken() public virtual string? GetAppApiToken()
{ {
return Options.AppApiToken; return Options.AppApiToken;
} }

4
framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/IDaprApiTokenProvider.cs

@ -2,6 +2,6 @@ namespace Volo.Abp.Dapr;
public interface IDaprApiTokenProvider public interface IDaprApiTokenProvider
{ {
string GetDaprApiToken(); string? GetDaprApiToken();
string GetAppApiToken(); string? GetAppApiToken();
} }
Loading…
Cancel
Save