功能是否支持在消费计划中使用客户端证书授权访问功能?类似于此处描述的方法?基本上,如果调用者没有提供有效的客户端证书,我正在寻找 Functions 运行时立即拒绝连接请求,而无需在代码中实现该授权例程。
3 回答
这是我想出的代码,注意:这是针对Azure Functions v1的,当 req 是HttpRequestMessage
呼叫者:
X509Certificate2 clientCert = req.GetClientCertificate();
if (!IsValidClientCertificate(clientCert))
{
return req.CreateErrorResponse(HttpStatusCode.Unauthorized, "A valid client certificate is not found");
}
对于Azure Functions v2,您可以从HttpRequest
using获取客户端证书req.HttpContext.Connection.ClientCertificate
基本验证功能:
static bool IsValidClientCertificate(X509Certificate2 clientCert)
{
// check the cert's thumbprint against expected thumbprint
if (clientCert.Thumbprint != "<expected thumprint>"
{
return false;
}
// check that we're within the cert's validity period
if (DateTime.Now > clientCert.NotAfter || DateTime.Now < clientCert.NotBefore)
{
return false;
}
// optionally check cert chaining validity
// if(!clientCert.Verify()) { return false; }
}
根据您的要求,我创建了我的 C# HttpTrigger 函数来检查这个问题,这里是核心代码:
if(req.Headers.Contains("X-ARR-ClientCert"))
{
byte[] clientCertBytes = Convert.FromBase64String(req.Headers.GetValues("X-ARR-ClientCert").FirstOrDefault());
var clientCert = new X509Certificate2(clientCertBytes);
return req.CreateResponse(HttpStatusCode.OK,"Thumbprint: "+clientCert.Thumbprint);
}
return req.CreateResponse(HttpStatusCode.OK, "Hello world");
对于应用服务计划,该功能可以按如下方式工作:
根据我的测试,该功能也可以在消费计划下按预期工作。
您可以按照How To Configure TLS Mutual Authentication for Web App 进行操作,或者只需登录 Azure Portal 并转到您的函数应用程序,单击 Platform fetures 选项卡下的“NETWORKIING > SSL”,然后启用 Incoming client certificate 选项。
是的,它确实。如果我理解正确,您想用 403 拒绝任何没有客户端证书的 https 请求
这是使用 Azure CLI 启用它的方法
az webapp update --set clientCertEnabled=true --name <app_name> --resource-group <group_name>
微软文档在这里
您也可以从 Azure 门户执行此操作,在 Azure Function App => Configuration => General Settings 下