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.SignalR;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization;
using Volo.Abp.Dapr;
@ -8,15 +9,23 @@ namespace Volo.Abp.AspNetCore.Mvc.Dapr;
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())
{
return;
}
var headerAppApiToken = GetDaprAppApiTokenOrNull(httpContext);
var headerAppApiToken = GetDaprAppApiTokenOrNull();
if (headerAppApiToken.IsNullOrWhiteSpace())
{
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())
{
return true;
}
var headerAppApiToken = GetDaprAppApiTokenOrNull(httpContext);
var headerAppApiToken = GetDaprAppApiTokenOrNull();
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)
{
return null;
@ -51,12 +60,16 @@ public class DaprAppApiTokenValidator : IDaprAppApiTokenValidator, ISingletonDep
return apiTokenHeader;
}
protected virtual string GetConfiguredAppApiToken(HttpContext httpContext)
protected virtual string GetConfiguredAppApiToken()
{
var expectedAppApiToken = httpContext
return HttpContext
.RequestServices
.GetRequiredService<IDaprApiTokenProvider>()
.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
.RequestServices
.GetRequiredService<IDaprAppApiTokenValidator>()
.CheckDaprAppApiToken(httpContext);
.CheckDaprAppApiToken();
}
public static bool IsValidDaprAppApiToken(this HttpContext httpContext)
@ -18,7 +18,7 @@ public static class DaprHttpContextExtensions
return httpContext
.RequestServices
.GetRequiredService<IDaprAppApiTokenValidator>()
.IsValidDaprAppApiToken(httpContext);
.IsValidDaprAppApiToken();
}
public static string? GetDaprAppApiTokenOrNull(HttpContext httpContext)
@ -26,6 +26,6 @@ public static class DaprHttpContextExtensions
return httpContext
.RequestServices
.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;
public interface IDaprAppApiTokenValidator
{
void CheckDaprAppApiToken(HttpContext httpContext);
bool IsValidDaprAppApiToken(HttpContext httpContext);
string? GetDaprAppApiTokenOrNull(HttpContext httpContext);
void CheckDaprAppApiToken();
bool IsValidDaprAppApiToken();
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;
}
public virtual string GetDaprApiToken()
public virtual string? GetDaprApiToken()
{
return Options.DaprApiToken;
}
public virtual string GetAppApiToken()
public virtual string? GetAppApiToken()
{
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
{
string GetDaprApiToken();
string GetAppApiToken();
string? GetDaprApiToken();
string? GetAppApiToken();
}
Loading…
Cancel
Save