c# - ASP.NET Core 检查 ActionFilterAttribute 中的 ClientCertificate
问题描述
我正在使用 ASP.NET Core 5.0 并希望ActionFilterAttribute
在控制器中使用来检查证书指纹。
在Startup.cs
我定义了一个“自定义”ClientCertificate-Forwarder 中,ClientCertificates 在标题中定义为X-ARR-ClientCert
:
services.AddCertificateForwarding(options =>
{
options.CertificateHeader = "X-ARR-ClientCert";
options.HeaderConverter = (headerValue) =>
{
X509Certificate2 clientCertificate = null;
if (!string.IsNullOrWhiteSpace(headerValue))
{
byte[] bytes = StringToByteArray(headerValue);
clientCertificate = new X509Certificate2(bytes);
}
return clientCertificate;
};
});
我的ActionFilterAttribute
:
public class IpCheckActionFilter : ActionFilterAttribute
{
private readonly string _certificateThumbprint;
private readonly string _safelist;
public IpCheckActionFilter(string safelist, string certificateThumbprint)
{
_safelist = safelist;
_certificateThumbprint = certificateThumbprint;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
var remoteIp = context.HttpContext.Connection.RemoteIpAddress;
CheckIP(remoteIp);
var certificate = context.HttpContext.Connection.ClientCertificate; // certificate is not passed
if (certificate == null || certificate.Thumbprint.ToUpper() != _certificateThumbprint.ToUpper())
{
Log.Warn("Certificate Thumbprint not correct");
context.Result = new StatusCodeResult(StatusCodes.Status404NotFound);
return;
}
base.OnActionExecuting(context);
}
}
现在certificate
fromcontext.HttpContext.Connection.ClientCertificate
为空。
我该怎么做才能将我的客户证书传递给ActionFilterAttribute
?
解决方案
推荐阅读
- google-sheets - vlookup 或索引匹配没有结果
- html - Chrome 扩展本地 .gif 不显示
- mysql - 在 mysql 中使用许多“OR LIKE”运算符的更好解决方案?
- kubernetes - 用于将日志发送到 Splunk 的 Kubernetes Sidecar
- javascript - 在表单提交时调用 `componentDidUpdate`
- python-3.x - AWS Lambda Python 3 检查事件变量是否存在
- matlab - Matlab删除以前的情节
- python - 基于共享值的列表集群列表
- c++ - Irrlicht 使用 createHillPlaneMesh 生成平面
- javascript - appcelerator 上的 Hello World