mirror of https://github.com/abpframework/abp.git
4 changed files with 105 additions and 0 deletions
@ -0,0 +1,62 @@ |
|||||
|
using Microsoft.AspNetCore.Http; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp.Authorization; |
||||
|
using Volo.Abp.Dapr; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.Dapr; |
||||
|
|
||||
|
public class DaprAppApiTokenValidator : IDaprAppApiTokenValidator, ISingletonDependency |
||||
|
{ |
||||
|
public virtual void CheckDaprAppApiToken(HttpContext httpContext) |
||||
|
{ |
||||
|
var expectedAppApiToken = GetConfiguredAppApiToken(httpContext); |
||||
|
if (expectedAppApiToken.IsNullOrWhiteSpace()) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
var headerAppApiToken = GetDaprAppApiTokenOrNull(httpContext); |
||||
|
if (headerAppApiToken.IsNullOrWhiteSpace()) |
||||
|
{ |
||||
|
throw new AbpAuthorizationException("Expected Dapr App API Token is not provided! Dapr should set the 'dapr-api-token' HTTP header."); |
||||
|
} |
||||
|
|
||||
|
if (expectedAppApiToken != headerAppApiToken) |
||||
|
{ |
||||
|
throw new AbpAuthorizationException("The Dapr App API Token (provided in the 'dapr-api-token' HTTP header) doesn't match the expected value!"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public virtual bool IsValidDaprAppApiToken(HttpContext httpContext) |
||||
|
{ |
||||
|
var expectedAppApiToken = GetConfiguredAppApiToken(httpContext); |
||||
|
if (expectedAppApiToken.IsNullOrWhiteSpace()) |
||||
|
{ |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
var headerAppApiToken = GetDaprAppApiTokenOrNull(httpContext); |
||||
|
return expectedAppApiToken == headerAppApiToken; |
||||
|
} |
||||
|
|
||||
|
public virtual string? GetDaprAppApiTokenOrNull(HttpContext httpContext) |
||||
|
{ |
||||
|
string apiTokenHeader = httpContext.Request.Headers["dapr-api-token"]; |
||||
|
if (string.IsNullOrEmpty(apiTokenHeader) || apiTokenHeader.Length < 1) |
||||
|
{ |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
return apiTokenHeader; |
||||
|
} |
||||
|
|
||||
|
protected virtual string GetConfiguredAppApiToken(HttpContext httpContext) |
||||
|
{ |
||||
|
var expectedAppApiToken = httpContext |
||||
|
.RequestServices |
||||
|
.GetRequiredService<IDaprApiTokenProvider>() |
||||
|
.GetAppApiToken(); |
||||
|
return expectedAppApiToken; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,31 @@ |
|||||
|
using Microsoft.AspNetCore.Http; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.Dapr; |
||||
|
|
||||
|
public static class DaprHttpContextExtensions |
||||
|
{ |
||||
|
public static void ValidateDaprAppApiToken(this HttpContext httpContext) |
||||
|
{ |
||||
|
httpContext |
||||
|
.RequestServices |
||||
|
.GetRequiredService<IDaprAppApiTokenValidator>() |
||||
|
.CheckDaprAppApiToken(httpContext); |
||||
|
} |
||||
|
|
||||
|
public static bool IsValidDaprAppApiToken(this HttpContext httpContext) |
||||
|
{ |
||||
|
return httpContext |
||||
|
.RequestServices |
||||
|
.GetRequiredService<IDaprAppApiTokenValidator>() |
||||
|
.IsValidDaprAppApiToken(httpContext); |
||||
|
} |
||||
|
|
||||
|
public static string? GetDaprAppApiTokenOrNull(HttpContext httpContext) |
||||
|
{ |
||||
|
return httpContext |
||||
|
.RequestServices |
||||
|
.GetRequiredService<IDaprAppApiTokenValidator>() |
||||
|
.GetDaprAppApiTokenOrNull(httpContext); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,10 @@ |
|||||
|
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); |
||||
|
} |
||||
Loading…
Reference in new issue